Операторы
Поддержка
Операторы
Например:
Stmt1:='SELECT * FROM tbl1';
Для динамического формирования оператора можно выполнять последовательное объединение строк.
Операторы
EXECUTE IMMEDIATE, который имеет в
EXECUTE IMMEDIATE :variable;
На оператор, указываемый переменной (variable), накладываются следующие ограничения:
Следующий пример иллюстрирует применение
stmt_str := 'INSERT INTO ' || table_name ||
' values (:f1, :f2, :f3)';
EXEC SQL EXECUTE IMMEDIATE :stmt_str;
Оператор EXECUTE IMMEDIATE удобен для одноразового выполнения, но при необходимости неоднократного выполнения, например в цикле одного и того же оператора, но с различными параметрами, более эффективно использовать и EXECUTE.
При выполнении оператора , указываемый им SQL-оператор передается в СУБД. Далее выполняется EXECUTE используется уже "откомпилированный" SQL-оператор, что значительно повышает производительность. Дополнительно при выполнении оператора EXECUTE на сервер передаются значения WHERE.
Оператор имеет в
PREPARE [ GLOBAL | LOCAL ] operator_sql FROM string_variable;
Параметр operator_sql определяет идентификатор SQL-оператора, указываемый далее для выполнения в операторе EXECUTE или для включения в курсор в операторах или .
Параметр string_variable указывает строку, содержащую динамически сформированный текст SQL-оператора.
Например:
stmt_str := 'INSERT INTO ' || table_name ||
' values (:f1, :f2, :f3)';
EXEC SQL PREPARE GLOBAL stmt1 FROM :stmt_str;
Фразы GLOBAL и LOCAL определяют область видимости оператора: GLOBAL указывает, что оператор с данным идентификатором доступен всем процессам данного сеанса работы с СУБД, а LOCAL ограничивает доступ рамками данного выполняемого модуля (значение по умолчанию).
Если создаются два одноименных оператора, но один как GLOBAL, а другой - как LOCAL, то СУБД создает два отдельных плана выполнения как для разных операторов. В противном случае при компиляции оператора с уже существующим именем просто строится новый
Для освобождения подготовленного SQL-оператора используется оператор , который освобождает все ресурсы, занимаемые подготовленным SQL-оператором.
Например:
EXEC SQL DEALLOCATE PREPARE GLOBAL stmt1;
Для выполнения откомпилированного SQL-оператора используется оператор EXECUTE, который в
EXECUTE [ GLOBAL | LOCAL ] operator_sql
[ INTO {variable .,:}
| { SQL DESCRIPTOR [ GLOBAL | LOCAL ]
descriptor_name } ]
[ USING {variable .,:}
| { SQL DESCRIPTOR [ GLOBAL | LOCAL ]
descriptor_name } ]
Фраза INTO указывается в том случае, если выполняемый SQL-оператор представляет собой запрос, возвращающий одну строку.
Значения
Например:
stmt_str :='INSERT INTO tbl1
VALUES (?, ?, ?)';
EXEC SQL PREPARE stmt2 FROM :stmt_str;
При выполнении данного откомпилированного оператора вместо EXECUTE или в области
Список значений для
USING оператора EXECUTE - для INTO откомпилированного оператора;INTO оператора EXECUTE - для INTO откомпилированного оператора.Например:
stmt_str1 :='INSERT INTO tbl1 (f1,f2,f3)
VALUES (?, ?, ?)';
EXEC SQL PREPARE stmt2 FROM :stmt_str1;
EXEC SQL EXECUTE stmt2 USING :f1, :f2, :f3;
Значение переменных f1, f2 и f3 основного языка программирования будут переданы на сервер для выполнения откомпилированного оператора с идентификатором stmt2.
Возможен вариант, когда откомпилированный оператор содержит INTO оператора SELECT, и в предикате.
Например:
stmt_str2 :='SELECT f1, f2, f3
FROM tbl1 INTO ?, ?, ?
WHERE f2= ?';
EXEC SQL PREPARE stmt3 FROM :stmt_str2;
EXEC SQL EXECUTE stmt3 INTO :f1, :f2, :f3
USING :f4;
Переменные f1, f2 и f3 основного языка программирования будут использованы как INTO-переменные, а значение переменной f4 будет передано на сервер для выполнения откомпилированного оператора с идентификатором stmt3.
USING, так и во фразе INTO оператора EXECUTE.
Для каждого откомпилированного SQL-оператора создается своя область
| Имя поля | Описание |
|---|---|
| TYPE | Целочисленное значение, определяющее тип параметра. |
| Это поле может принимать следующие значения: | |
CHARACTER - 1 |
|
- 3 |
|
INTEGER - 4 |
|
- 5 |
|
FLOAT - 6 |
|
REAL - 7 |
|
- 8 |
|
DATE - 9 |
|
TIME - 9 |
|
- 9 |
|
- 10 |
|
- 12 |
|
BIT - 14 |
|
BIT - 15 |
|
В зависимости от значения поля TYPE могут использоваться поля и SCALE |
|
NAME |
Идентификатор параметра, соответствующего данному элементу. Это значение может отсутствовать, например, для вычислимых столбцов. В этом случае используется поле UNNAMED |
UNNAMED |
Если идентификатор параметра в поле NAME не указан, то значение данного поля будет 1; если идентификатор параметра присутствует, то 0 |
DATA |
Содержит значение параметра |
NULLABLE |
Определяет, может ли параметр принимать значение NULL: 0 - может, 1 - не может |
|
Используется аналогично индикаторной переменной |
Работа с
ALLOCATE DESCRIPTOR ; SET DESCRIPTOR ; DESCRIBE для автоматической установки значений; GET DESCRIPTOR ;EXECUTE ;DEALLOCATE DESCRIPTOR .Рассмотрим более подробно все этапы работы с
Создание , который в
ALLOCATE DESCRIPTOR descriptor_name
[ WITH MAX count_of_inctances ];
Этот оператор создает область
Фраза WITH MAX позволяет установить максимально допустимое число элементов
Например:
EXEC SQL ALLOCATE DESCRIPTOR descr1
WITH MAX 4;
Этот оператор создает descr1, который может применяться для откомпилированного оператора, использующего не более четырех
Инициализация
DESCRIBE ; SET DESCRIPTOR .Начальную инициализацию возможно выполнить посредством оператора , что значительно проще, а затем изменить требуемые поля с помощью оператора .
Оператор имеет в
DESCRIBE [ INPUT | OUTPUT ] operator_sql
USING SQL DESCRIPTOR descriptor_name;
Этот оператор сохраняет в предварительно созданном
Фраза INPUT указывает, что инициируется
Фраза OUTPUT указывает, что инициируется OUTPUT.
При выполнении оператора для каждого элемента устанавливаются значения полей TYPE, NAME, UNNAMED и NULLABLE, а также полей, более точно специфицирующих конкретный тип данных ( LENGTH, и т.п.).
Например:
stmt1 :='SELECT f1, f2 FROM tbl1 INTO ?, ?
WHERE f2= 1';
EXEC SQL ALLOCATE DESCRIPTOR descr1 WITH MAX 2;
EXEC SQL DESCRIBE OUTPUT :stmt1
USING SQL DESCRIPTOR descr1;
В результате таких действий при инициализации descr1 будет создано два элемента со значениями полей NAME f1 и f2.
Хотя , но сами значения этих переменных, хранимые в полях DATA, оператором установить нельзя. Для этой цели можно использовать оператор , который имеет в
SET DESCRIPTOR
[ GLOBAL | LOCAL ] descriptor_name
{ COUNT = integer_value }
| { VALUE number_of_element
field_of_element = value} .,:};
Этот оператор может выполнять одно из следующих действий:
COUNT ;number_of_element ).Значения полей NAME, RETURNED_LENGHT, NULLABLE, RETURNED_OCTET_LENGHT, COLLATION_CATALOG, COLLATION_SCHEMA и COLLATION_NAME нельзя изменить с помощью оператора .
Например:
stmt1 :='SELECT f1, f2, f3
FROM tbl1 INTO ?, ?, ?
WHERE f2= 1';
EXEC SQL ALLOCATE DESCRIPTOR descr1
WITH MAX 2;
EXEC SQL DESCRIBE OUTPUT :stmt1
USING SQL DESCRIPTOR descr1;
EXEC SQL SET DESCRIPTOR descr1
VALUE 3 TYPE=1, LENGTH=15;
Таким образом, третий CHARACTER и длину 15 символов.
Если при создании , то перед установкой значений полей каждого элемента следует задать количество элементов дескриптора (фраза COUNT ). Иногда для этого может потребоваться выполнение .
Значения любых полей элементов , который имеет в
GET DESCRIPTOR
[ GLOBAL | LOCAL ] descriptor_name
{ integer_variable= COUNT }
| { VALUE number_of_element
variable = field_ of_element } .,:};
Например:
EXEC SQL SET DESCRIPTOR descr1
VALUE 3 TYPE=1, LENGTH=15;
EXEC SQL GET DESCRIPTOR descr1
VALUE 3 :var_type = TYPE,
:var_lenght = LENGTH;
При выполнении такого SQL-оператора в переменную var_type будет занесено значение 1, а в переменную var_lenght - значение 15.
Значения полей DATA EXECUTE.
Например:
str1:='SELECT f3 FROM tbl1 INTO ?
WHERE f2 = 1';
EXEC SQL PREPARE stmt1 FROM :str1;
EXEC SQL ALLOCATE DESCRIPTOR descr1
WITH MAX 1;
EXEC SQL DESCRIBE OUTPUT stmt1
USING SQL DESCRIPTOR descr1;
EXEC SQL EXECUTE stmt1 INTO
SQL DESCRIPTOR descr1;
GET DESCRIPTOR descr1
VALUE 1 :f1=DATA :fnull=NULLABLE;
В ), но и два дополнительных типа курсоров:
DECLARE CURSOR ; ALLOCATE CURSOR . Этот тип курсоров иногда называется выделенными курсорами.Объявляемые и размещаемые курсоры могут иметь
Для создания курсоров используются следующие операторы:
ALLOCATE CURSOR , в котором курсор указывается идентификатором переменной, описывающей SQL-оператор; DECLARE CURSOR , в котором курсор указывается идентификатором откомпилированного SQL-оператора.Например:
str1:='INSERT INTO tbl1 VALUES (1,10) '; EXEC SQL ALLOCATE cur1 CURSOR FOR :str1; EXEC SQL PREPARE stmt1 FROM :str1; EXEC SQL DECLARE cur2 CURSOR FOR stmt1;
Открываются и закрываются OPEN и CLOSE. Но при открытии курсора, имеющего USING.
Например:
str1:='SELECT f2 FROM tbl1 WHERE f1=? '; EXEC SQL ALLOCATE cur1 CURSOR FOR :str1; EXEC SQL OPEN cur1 USING :f2; EXEC SQL FETCH cur1 INTO :f1;
Во фразе INTO оператора FETCH может быть указан как список INTO-переменных, так и
Операторы
Поддержка
Операторы
Например:
Stmt1:='SELECT * FROM tbl1';
Для динамического формирования оператора можно выполнять последовательное объединение строк.
Операторы
EXECUTE IMMEDIATE, который имеет в
EXECUTE IMMEDIATE :variable;
На оператор, указываемый переменной (variable), накладываются следующие ограничения:
Следующий пример иллюстрирует применение
stmt_str := 'INSERT INTO ' || table_name ||
' values (:f1, :f2, :f3)';
EXEC SQL EXECUTE IMMEDIATE :stmt_str;
Оператор EXECUTE IMMEDIATE удобен для одноразового выполнения, но при необходимости неоднократного выполнения, например в цикле одного и того же оператора, но с различными параметрами, более эффективно использовать и EXECUTE.
При выполнении оператора , указываемый им SQL-оператор передается в СУБД. Далее выполняется EXECUTE используется уже "откомпилированный" SQL-оператор, что значительно повышает производительность. Дополнительно при выполнении оператора EXECUTE на сервер передаются значения WHERE.
Оператор имеет в
PREPARE [ GLOBAL | LOCAL ] operator_sql FROM string_variable;
Параметр operator_sql определяет идентификатор SQL-оператора, указываемый далее для выполнения в операторе EXECUTE или для включения в курсор в операторах или .
Параметр string_variable указывает строку, содержащую динамически сформированный текст SQL-оператора.
Например:
stmt_str := 'INSERT INTO ' || table_name ||
' values (:f1, :f2, :f3)';
EXEC SQL PREPARE GLOBAL stmt1 FROM :stmt_str;
Фразы GLOBAL и LOCAL определяют область видимости оператора: GLOBAL указывает, что оператор с данным идентификатором доступен всем процессам данного сеанса работы с СУБД, а LOCAL ограничивает доступ рамками данного выполняемого модуля (значение по умолчанию).
Если создаются два одноименных оператора, но один как GLOBAL, а другой - как LOCAL, то СУБД создает два отдельных плана выполнения как для разных операторов. В противном случае при компиляции оператора с уже существующим именем просто строится новый
Для освобождения подготовленного SQL-оператора используется оператор , который освобождает все ресурсы, занимаемые подготовленным SQL-оператором.
Например:
EXEC SQL DEALLOCATE PREPARE GLOBAL stmt1;
Для выполнения откомпилированного SQL-оператора используется оператор EXECUTE, который в
EXECUTE [ GLOBAL | LOCAL ] operator_sql
[ INTO {variable .,:}
| { SQL DESCRIPTOR [ GLOBAL | LOCAL ]
descriptor_name } ]
[ USING {variable .,:}
| { SQL DESCRIPTOR [ GLOBAL | LOCAL ]
descriptor_name } ]
Фраза INTO указывается в том случае, если выполняемый SQL-оператор представляет собой запрос, возвращающий одну строку.
Значения
Например:
stmt_str :='INSERT INTO tbl1
VALUES (?, ?, ?)';
EXEC SQL PREPARE stmt2 FROM :stmt_str;
При выполнении данного откомпилированного оператора вместо EXECUTE или в области
Список значений для
USING оператора EXECUTE - для INTO откомпилированного оператора;INTO оператора EXECUTE - для INTO откомпилированного оператора.Например:
stmt_str1 :='INSERT INTO tbl1 (f1,f2,f3)
VALUES (?, ?, ?)';
EXEC SQL PREPARE stmt2 FROM :stmt_str1;
EXEC SQL EXECUTE stmt2 USING :f1, :f2, :f3;
Значение переменных f1, f2 и f3 основного языка программирования будут переданы на сервер для выполнения откомпилированного оператора с идентификатором stmt2.
Возможен вариант, когда откомпилированный оператор содержит INTO оператора SELECT, и в предикате.
Например:
stmt_str2 :='SELECT f1, f2, f3
FROM tbl1 INTO ?, ?, ?
WHERE f2= ?';
EXEC SQL PREPARE stmt3 FROM :stmt_str2;
EXEC SQL EXECUTE stmt3 INTO :f1, :f2, :f3
USING :f4;
Переменные f1, f2 и f3 основного языка программирования будут использованы как INTO-переменные, а значение переменной f4 будет передано на сервер для выполнения откомпилированного оператора с идентификатором stmt3.
USING, так и во фразе INTO оператора EXECUTE.
Для каждого откомпилированного SQL-оператора создается своя область
| Имя поля | Описание |
|---|---|
| TYPE | Целочисленное значение, определяющее тип параметра. |
| Это поле может принимать следующие значения: | |
CHARACTER - 1 |
|
- 3 |
|
INTEGER - 4 |
|
- 5 |
|
FLOAT - 6 |
|
REAL - 7 |
|
- 8 |
|
DATE - 9 |
|
TIME - 9 |
|
- 9 |
|
- 10 |
|
- 12 |
|
BIT - 14 |
|
BIT - 15 |
|
В зависимости от значения поля TYPE могут использоваться поля и SCALE |
|
NAME |
Идентификатор параметра, соответствующего данному элементу. Это значение может отсутствовать, например, для вычислимых столбцов. В этом случае используется поле UNNAMED |
UNNAMED |
Если идентификатор параметра в поле NAME не указан, то значение данного поля будет 1; если идентификатор параметра присутствует, то 0 |
DATA |
Содержит значение параметра |
NULLABLE |
Определяет, может ли параметр принимать значение NULL: 0 - может, 1 - не может |
|
Используется аналогично индикаторной переменной |
Работа с
ALLOCATE DESCRIPTOR ; SET DESCRIPTOR ; DESCRIBE для автоматической установки значений; GET DESCRIPTOR ;EXECUTE ;DEALLOCATE DESCRIPTOR .Рассмотрим более подробно все этапы работы с
Создание , который в
ALLOCATE DESCRIPTOR descriptor_name
[ WITH MAX count_of_inctances ];
Этот оператор создает область
Фраза WITH MAX позволяет установить максимально допустимое число элементов
Например:
EXEC SQL ALLOCATE DESCRIPTOR descr1
WITH MAX 4;
Этот оператор создает descr1, который может применяться для откомпилированного оператора, использующего не более четырех
Инициализация
DESCRIBE ; SET DESCRIPTOR .Начальную инициализацию возможно выполнить посредством оператора , что значительно проще, а затем изменить требуемые поля с помощью оператора .
Оператор имеет в
DESCRIBE [ INPUT | OUTPUT ] operator_sql
USING SQL DESCRIPTOR descriptor_name;
Этот оператор сохраняет в предварительно созданном
Фраза INPUT указывает, что инициируется
Фраза OUTPUT указывает, что инициируется OUTPUT.
При выполнении оператора для каждого элемента устанавливаются значения полей TYPE, NAME, UNNAMED и NULLABLE, а также полей, более точно специфицирующих конкретный тип данных ( LENGTH, и т.п.).
Например:
stmt1 :='SELECT f1, f2 FROM tbl1 INTO ?, ?
WHERE f2= 1';
EXEC SQL ALLOCATE DESCRIPTOR descr1 WITH MAX 2;
EXEC SQL DESCRIBE OUTPUT :stmt1
USING SQL DESCRIPTOR descr1;
В результате таких действий при инициализации descr1 будет создано два элемента со значениями полей NAME f1 и f2.
Хотя , но сами значения этих переменных, хранимые в полях DATA, оператором установить нельзя. Для этой цели можно использовать оператор , который имеет в
SET DESCRIPTOR
[ GLOBAL | LOCAL ] descriptor_name
{ COUNT = integer_value }
| { VALUE number_of_element
field_of_element = value} .,:};
Этот оператор может выполнять одно из следующих действий:
COUNT ;number_of_element ).Значения полей NAME, RETURNED_LENGHT, NULLABLE, RETURNED_OCTET_LENGHT, COLLATION_CATALOG, COLLATION_SCHEMA и COLLATION_NAME нельзя изменить с помощью оператора .
Например:
stmt1 :='SELECT f1, f2, f3
FROM tbl1 INTO ?, ?, ?
WHERE f2= 1';
EXEC SQL ALLOCATE DESCRIPTOR descr1
WITH MAX 2;
EXEC SQL DESCRIBE OUTPUT :stmt1
USING SQL DESCRIPTOR descr1;
EXEC SQL SET DESCRIPTOR descr1
VALUE 3 TYPE=1, LENGTH=15;
Таким образом, третий CHARACTER и длину 15 символов.
Если при создании , то перед установкой значений полей каждого элемента следует задать количество элементов дескриптора (фраза COUNT ). Иногда для этого может потребоваться выполнение .
Значения любых полей элементов , который имеет в
GET DESCRIPTOR
[ GLOBAL | LOCAL ] descriptor_name
{ integer_variable= COUNT }
| { VALUE number_of_element
variable = field_ of_element } .,:};
Например:
EXEC SQL SET DESCRIPTOR descr1
VALUE 3 TYPE=1, LENGTH=15;
EXEC SQL GET DESCRIPTOR descr1
VALUE 3 :var_type = TYPE,
:var_lenght = LENGTH;
При выполнении такого SQL-оператора в переменную var_type будет занесено значение 1, а в переменную var_lenght - значение 15.
Значения полей DATA EXECUTE.
Например:
str1:='SELECT f3 FROM tbl1 INTO ?
WHERE f2 = 1';
EXEC SQL PREPARE stmt1 FROM :str1;
EXEC SQL ALLOCATE DESCRIPTOR descr1
WITH MAX 1;
EXEC SQL DESCRIBE OUTPUT stmt1
USING SQL DESCRIPTOR descr1;
EXEC SQL EXECUTE stmt1 INTO
SQL DESCRIPTOR descr1;
GET DESCRIPTOR descr1
VALUE 1 :f1=DATA :fnull=NULLABLE;
В ), но и два дополнительных типа курсоров:
DECLARE CURSOR ; ALLOCATE CURSOR . Этот тип курсоров иногда называется выделенными курсорами.Объявляемые и размещаемые курсоры могут иметь
Для создания курсоров используются следующие операторы:
ALLOCATE CURSOR , в котором курсор указывается идентификатором переменной, описывающей SQL-оператор; DECLARE CURSOR , в котором курсор указывается идентификатором откомпилированного SQL-оператора.Например:
str1:='INSERT INTO tbl1 VALUES (1,10) '; EXEC SQL ALLOCATE cur1 CURSOR FOR :str1; EXEC SQL PREPARE stmt1 FROM :str1; EXEC SQL DECLARE cur2 CURSOR FOR stmt1;
Открываются и закрываются OPEN и CLOSE. Но при открытии курсора, имеющего USING.
Например:
str1:='SELECT f2 FROM tbl1 WHERE f1=? '; EXEC SQL ALLOCATE cur1 CURSOR FOR :str1; EXEC SQL OPEN cur1 USING :f2; EXEC SQL FETCH cur1 INTO :f1;
Во фразе INTO оператора FETCH может быть указан как список INTO-переменных, так и
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.