Способы передачи параметров во встроенном SQL

1) Переменные HOST-языка

Это простейший способ, основанный на применении раздела USING оператора EXECUTE. Число и типы данных переменных должны быть совместимы с типами данных соответствующих параметров. Если какая-нибудь переменная содержит отрицательное значение, то соответствующему маркеру параметра присваивается NULL-значение.

2) Дескрипторы СУБД

• Понятие дескриптора
Дескриптор представляет собой структуру, принадлежащую программному обеспечению СУБД. Она включает набор элементов данных, разделенных на две части. Первая часть определяет общее число элементов данных, а вторая часть описывает каждый элемент данных, состоит из 13 полей и повторяется для каждого элемента данных.

• Фиксированная часть структуры
Фиксированная часть описывает число передаваемых элементов. Для этого предназначено поле COUNT.

• Переменная часть структуры

TYPE Тип данных элемента
LENGTH Длина элемента
OCTET_LENGTH Длина элементы (в виде количества восьмибитовых наборов)
RETURNED_LENGTH Длина возвращаемого элемента данных
RETURNED_OCTED_LENGTH Длина возвращаемых данных (в виде числа восьмибитовых наборов)
PRECISION Точность элемента данных
SCALE Показатель степени числового элемента данных
DATETIME_INTERVAL_CODE Код интервала времени
DATETIME_INTERVAL_PRESITION Точность интервала времени
NULLABLE Указывает, может ли элемент принимать значение NULL (1|0)
INDICATOR Указывает, содержит ли элемент данных значение NULL
DATA Сам элемент
NAME Имя элемента данных
UNNAMED Указывает, отсутствует ли у элемента данных имя

• Коды типов данных

Тип данных Код
BIT 14
FLOAT 6
BIT VARYING 15
INTEGER 4
CHARACTER 1
INTERVAL 10
CHARACTER VARYING 12
NUMERIC 2
DATE, TIME или TIMESTAMP 9
REAL 7
DECIMAL 3
SMALLINT 5
DOUBLE PRICISION 8
Тип, зависящий от реализации <0

• Операторы работы с дескрипторами
Создание области дескрипторов

ALLOCATE DESCRIPTOR <имя дескриптора> [WITH MAX <число элементов>]

Удаление области дескрипторов

DEALLOCATE DESCRIPTOR <имя дескриптора>

Связывание дескриптора с SQL-оператором

DESCRIBE [INPUT|OUTPUT] USING SQL DESCRIPTOR <имя дескриптора>

Помещение данных в дескриптор

SET DESCRIPTOR [GLOBAL|LOCAL] <имя дескриптора> {COUNT=<целое>|VALUE <номер элемента> <поле дескриптора = значение, ...>}

Извлечение данных из дескриптора

GET DESCRIPTOR <имя дескриптора> {<переменная>=COUNT|VALUE <номер элемента> <переменная = поле дескриптора, ...>}

Пример работы с дескриптором

exec sql allocate descriptor parmdesc with max :parment;
exec sql describe querystmt using sql descriptor
parmdesc;
exec sql set descriptor parmdesc value (:i+1)
type=:typecode;
exec sql set descriptor parmdesc value (:i+1)
length=:length;

Примечания: parmdesc – имя дескриптора; querystmt – имя оператора, подлежащего исполнению.

3) Область SQLDA в DB2

Назначение области SQLDA
В СУБД DB2 для передачи параметров используется специальная структура данных, называемая областью данных SQL (SQLDA). Эта область описывается на HOST-языке и используется тогда, когда во время написания программы неизвестны ни число параметров, ни их типы данных. Область SQLDA позволяет выполнять функции передачи параметров довольно гибко, однако она обладает рядом недостатков. Поскольку эта структура низкого уровня, то весьма специфична для каждого языка программирования. Трудно ее использовать в языке Fortran.

Особенности области SQLDA
SQLDA – это структура данных переменной длины, состоящая из двух частей:

Постоянной части, располагаемой в начале области SQLDA. Ее поля идентифицируют структуру данных как область SQLDA и задают размер конкретной области.

Переменной части, представляющей собой массив из одной или нескольких структур данных SQLVAR. Структура SQLVAR хотя и отличается от дескриптора, однако идем используются аналогичные.


Комментарии запрещены.





Статистика

Рейтинг@Mail.ru