17.1. Оператор выделения памяти под дескриптор
<allocate descriptor statement> ::=
ALLOCATE DESCRIPTOR <descriptor name>
[WITH MAX <occurrences>]
<occurences> ::= <simple value specification>
<descriptor name> ::=
(<scope option>] <simple value specification>
<scope option> ::= GLOBAL | LOCAL
<simple value specification> ::=
<parameter name>
(<embedded variable name>
(<literal>
Комментарий:
Дескриптор, это динамически
выделяемая часть памяти прикладной
программы, служащая для принятия
информации о результате или
параметрах динамически
подготовленного оператора SQL или
задания параметров такого
оператора. Смысл того, что для
выделения памяти используется
оператор SQL, а не просто стандартная
функция alloc или какая-нибудь другая
функция динамического запроса
памяти, состоит в том, что
прикладная программа не знает
структуры дескриптора и даже его
адреса. Это позволяет не
привязывать SQL к особенностям
какой-либо системы
программирования или ОС. Все обмены
информацией между собственно
прикладной программой и
дескрипторами производятся также с
помощью специальных операторов SQL
(GET и SET, см. ниже).
Второй вопрос: зачем вообще
выделять память под дескрипторы
динамически. Это нужно потому, что в
общем случае прикладная программа,
использующая динамический SQL, не
знает в статике число одновременно
действующих динамических
операторов SQL, описание которых
может потребоваться. С этим же
связано то, что имя дескриптора
может задаваться как литеральной
строкой символов, так и через
строковую переменную включающего
языка, т.е. его можно генерировать
во время выполнения программы.
В операторе ALLOCATE DESCRIPTOR, помимо
прочего, может указываться число
описательных элементов, на которое
он рассчитан. Если, например, при
выделении памяти под дескриптор в
разделе WITH MAX указано целое
положительное число N, а потом
дескриптор используется для
описания M (M>N) элементов (например,
M столбцов результата запроса), то
это приводит к возникновению
исключительной ситуации.
Предыдущая
глава || Оглавление
|| Следующая глава
|