Некоторые черты SQL/92 и SQL-3 (46298)

Посмотреть архив целиком

Некоторые черты SQL/92 и SQL-3

Оператор выделения памяти под дескриптор

::=

ALLOCATE DESCRIPTOR

[WITH MAX ]

::=

::=

(]

::= GLOBAL | LOCAL

::=

(

(

Комментарий:

Дескриптор, это динамически выделяемая часть памяти прикладной программы, служащая для принятия информации о результате или параметрах динамически подготовленного оператора SQL или задания параметров такого оператора. Смысл того, что для выделения памяти используется оператор SQL, а не просто стандартная функция alloc или какая-нибудь другая функция динамического запроса памяти, состоит в том, что прикладная программа не знает структуры дескриптора и даже его адреса. Это позволяет не привязывать SQL к особенностям какой-либо системы программирования или ОС. Все обмены информацией между собственно прикладной программой и дескрипторами производятся также с помощью специальных операторов SQL (GET и SET, см. ниже).

Второй вопрос: зачем вообще выделять память под дескрипторы динамически. Это нужно потому, что в общем случае прикладная программа, использующая динамический SQL, не знает в статике число одновременно действующих динамических операторов SQL, описание которых может потребоваться. С этим же связано то, что имя дескриптора может задаваться как литеральной строкой символов, так и через строковую переменную включающего языка, т.е. его можно генерировать во время выполнения программы.

В операторе ALLOCATE DESCRIPTOR, помимо прочего, может указываться число описательных элементов, на которое он рассчитан. Если, например, при выделении памяти под дескриптор в разделе WITH MAX указано целое положительное число N, а потом дескриптор используется для описания M (M>N) элементов (например, M столбцов результата запроса), то это приводит к возникновению исключительной ситуации.

Оператор освобождения памяти из-под дескриптора

::=

DEALLOCATE DESCRIPTOR

Комментарий:

Выполнение этого оператора приводит к освобождению памяти из-под ранее выделенного дескриптора. После этого использование имени дескриптора незаконно в любом операторе, кроме ALLOCATE DESCRIPTOR.

Оператор получения информации из области дескриптора SQL

::=

GET DESCRIPTOR

::=

( VALUE

({ }...]

::=

COUNT

::=

::=

::=

::=

::=

TYPE

( LENGHT

( OCTET_LENGHT

( RETURNED_LENGHT

( RETURNED_OCTET_LENGHT

( PRECISION

( SCALE

( DATETIME_INTERVAL_CODE

( DATATIME_INTERVAL_PRECISION

( NULLABLE

( INDICATOR

( DATA

( NAME

( UNNAMED

( COLLATION_CATALOG

( COLLATION_SCHEMA

( COLLATION_NAME

( CHARACTER_SET_CATALOG

( CHARACTER_SET_SCHEMA

( CHARACTER_SET_NAME

::=

(

Комментарий:

Оператор GET DESCRIPTOR служит для выборки описательной информации, ранее размещенной в дескрипторе с помощью оператора DESCRIBE. За одно выполнение оператора можно получить либо число заполненных элементов дескриптора (COUNT), либо информацию, содержащуюся в одном из заполненных элементов.


Оператор установки дескриптора

::=

SET DESCRIPTOR

::=

( VALUE

[{ }...]

::= COUNT

::=

::=

::=

::=

Комментарий:

Оператор SET DESCRIPTOR служит для заполнения элементов дескриптора с целью его использования в разделе USING. За одно выполнение оператора можно поместить значение в поле COUNT (число заполненных элементов), либо частично или полностью сформировать один элемент дескриптора.


Оператор подготовки

::=

PREPARE

FROM

::=

::=

|

|

|

|

::=

|

|

|

|

|

|

::=

::=

::=

::=

::=

::= |

::= [scope option]

::=

[]

[]

::=

FOR { READ ONLY | UPDATE [ OF ] }

::=

|

::=

SELECT []

::= DISTINCT | ALL

Комментарий:

Оператор PREPARE вызывает компиляцию и построение плана выполнения заданного в текстовой форме оператора SQL. После успешного выполнения оператора PREPARE с подготовленным оператором связывается указанное (литерально или косвенно) имя этого оператора, которое потом может быть использовано в операторах DESCRIBE, EXECUTE, OPEN CURSOR, ALLOCATE CURSOR и DEALLOCATE PREPARE. Эта связь сохраняется до явного выполнения оператора DEALLOCATE PREPARE.


Оператор отказа от подготовленного оператора

::=

DEALLOCATE PREPARE

Комментарий:

Выполнение этого оператора приводит к тому, что ранее подготовленный оператор SQL, связанный с указанным именем оператора, ликвидируется, и, соответственно, имя оператора становится неопределенным. Если подготовленный оператор являлся оператором выборки, и к моменту выполнения оператора DEALLOCATE существовал открытый курсор, связанный с именем подготовленного оператора, то оператор DEALLOCATE возвращает код ошибки. Если же для подготовленного оператора выборки существовал неоткрытый курсор, образованный с помощью оператора ALLOCATE CURSOR, то этот курсор ликвидируется. Если курсор объявлялся оператором DECLARE CURSOR, то такой курсор переходит в состояние, существовавшее до выполнения оператора PREPARE. Если с курсором был связан подготовленный оператор (динамический DELETE или UPDATE), то для этих операторов выполняется неявный оператор DEALLOCATE.

Оператор запроса описания подготовленного оператора

::=

|

::=

DESCRIBE INPUT

::=

DESCRIBE [OUTPUT]

::= |

::=

{ USING | INTO } [{ }...]

::=

::=

{ USING | INTO } SQL DESCRIPTOR

::=

|

::=

[]

::= [INDICATOR]

::=

[]

::= [INDICATOR]

Комментарий:

При выполнении оператора DESCRIBE происходит заполнение указанного в операторе дескриптора информацией, описывающей либо результат ранее подготовленного оператора SQL (если это оператор выборки), либо количество и типы параметров подготовленного оператора. В здесь полагается писать USING SQL DESCRIPTOR.

Оператор выполнения подготовленного оператора

::=

EXECUTE

(]

(]

::=

::=

Комментарий:

Оператор EXECUTE может быть применен к любому ранее подготовленному оператору SQL, кроме . Если это оператор , то оператор EXECUTE должен содержать раздел с ключевым словом INTO. В любом случае число фактических параметров, задаваемых через разделы using, должно соответствовать числу формальных параметров, определенных в подготовленном операторе SQL.

Оператор подготовки с немедленным выполнением

::=

EXECUTE IMMEDIATE

Комментарий:

При выполнении оператора EXECUTE IMMEDIATE производится подготовка и немедленное выполнение заданного в текстовой форме оператора SQL. При этом подготавливаемый оператор не должен быть оператором выборки, не должен содержать формальных параметров и комментариев.

Оператор объявления курсора над динамически подготовленным оператором выборки

::=

DECLARE [INSENSITIVE] [SCROLL]

CURSOR FOR

Комментарий:

Как определяется в новом стандарте, для всех операторов DECLARE CURSOR, курсоры фактически создаются при начале транзакции и уничтожаются при ее завершении. Заметим, что в этом операторе и - прямо заданные идентификаторы.

Оператор определения курсора над динамически подготовленным оператором выборки

::=

ALLOCATE [INSENSITIVE] [SCROLL]

CURSOR FOR

::=

(]

Комментарий:

Курсоры, определяемые с помощью оператора ALLOCATE CURSOR, фактически создаются при выполнении такого оператора и уничтожаются при выполнении оператора DEALLOCATE PREPARE или при завершении транзакции. В этом операторе имена курсора и подготовленного оператора SQL могут задаваться не только в литеральной форме, но и через переменные. относится к области видимости имен: в пределах текущего модуля или в пределах текущей сессии.

Оператор открытия курсора, связанного с динамически подготовленным оператором выборки

::=

OPEN []

Комментарий:

По сути, оператор открытия курсора, связанного с динамически подготовленным оператором SQL, отличается от статического случая только возможным наличием раздела using, в котором задаются фактические параметры оператора выборки. Кроме того, имя курсора может задаваться через переменную.

Оператор чтения строки по курсору, связанному с динамически подготовленным оператором выборки

::=

FETCH [[] FROM]

Комментарий:

По сути, оператор чтения по курсору, связанному с динамически подготовленным оператором SQL, отличается от статического случая только возможным наличием раздела using, в котором задается размещение значений текущей строки результирующей таблицы. Кроме того, имя курсора может задаваться через переменную.

Оператор закрытия курсора, связанного с динамически подготовленным оператором выборки

::=

CLOSE

Комментарий:

По сути, оператор закрытия курсора, связанного с динамически подготовленным оператором SQL, отличается от статического случая только тем, что имя курсора может задаваться через переменную

Оператор позиционного удаления по курсору, связанному с динамически подготовленным оператором выборки

::=

DELETE FROM

WHERE CURRENT OF

Комментарий:

По сути, оператор позиционного удаления по курсору, связанному с динамически подготовленным оператором SQL, отличается от статического случая только тем, что имя курсора может задаваться через переменную.

Оператор позиционной модификации по курсору, связанному с динамически подготовленным оператором выборки

::=

UPDATE

SET [{ }...]

WHERE CURRENT OF

Комментарий:

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

Подготавливаемый оператор позиционного удаления


Случайные файлы

Файл
94323.rtf
78976.rtf
185119.doc
28809.rtf
63997.rtf




Чтобы не видеть здесь видео-рекламу достаточно стать зарегистрированным пользователем.
Чтобы не видеть никакую рекламу на сайте, нужно стать VIP-пользователем.
Это можно сделать совершенно бесплатно. Читайте подробности тут.