ba871a7d

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


Оператор PREPARE имеет синтаксис:

<prepare-statement> ::=

PREPARE <statement-name> FROM <host-string-variable>

<statement-name> ::= <name>

Во время выполнения оператора PREPARE символьная строка, содержащаяся в host-string-variable, передается компилятору SQL, который обрабатывает ее почти таким же образом, как если бы получил в статике. Построенный при выполнении оператора PREPARE код остается действующим до конца транзакции или до повторного выполнения данного оператора PREPARE в пределах этой же транзакции.

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


Оператор определяется следующим синтаксисом:

<prepare statement> ::=

PREPARE <SQL statement name>

FROM <SQL statement variable>

<SQL statement variable> ::=

<simple target specification>

<preparable statement> ::=

<preparable SQL data statement>

| <preparable SQL schema statement>

| <preparable SQL transaction statement>

| <preparable SQL session statement>

| <preparable implementation-defined statement>

<preparable SQL data statement> ::=



<delete statement: searched>

| <dynamic single row select statement>

| <insert statement>

| <dynamic select statement>

| <update statement: searched>

| <preparable dynamic delete statement: positioned>

| <preparable dynamic update statement: positioned>

<preparable SQL schema statement> ::=

<SQL schema statement>

<preparable SQL transaction statement> ::=

<SQL transaction statement>

<preparable SQL session statement> ::=

<SQL session statement>

<dynamic select statement> ::=

<cursor specification>

<dynamic simple row select statement> ::=

<query specification>

<SQL statement name> ::=

<statement name>

| <extended statement name>

<extended statement name> ::=

[scope option] <simple value specification>

<cursor specification> ::=

<query expression> [<order by clause>]

[<updatability clause>]

<updatability clause> ::=

FOR { READ ONLY | UPDATE [ OF <column name list> ] }

<query expression> ::=

<non-join query expression>

| <joined table>

<query specification> ::=

SELECT [<set quantifier>]

<select list> <table expression>

<set quantifier> ::= DISTINCT | ALL

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



Содержание раздела