Способы передачи параметров во встроенном 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Указывает, отсутствует ли у элемента данных имя

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

Тип данныхКод
BIT14
FLOAT6
BIT VARYING15
INTEGER4
CHARACTER1
INTERVAL10
CHARACTER VARYING12
NUMERIC2
DATE, TIME или TIMESTAMP9
REAL7
DECIMAL3
SMALLINT5
DOUBLE PRICISION8
Тип, зависящий от реализации<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 хотя и отличается от дескриптора, однако идем используются аналогичные.


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




Статистика