Основы языка PL/SQL. Гаршина В.В - 46 стр.

UptoLike

Составители: 

46
3.4. Динамический SQL
При создании приложений PL/SQL часто возникает ситуация, когда
структура SQL-запросов заранее не определена и может изменяться в зави-
симости от каких-либо условий. Для решения ситуаций подобного типа
используется механизм, называемый динамический SQL. Суть этого меха-
низма заключается в том, что запросы внутри блоков PL/SQL формируют-
ся в виде текстовых строк
непосредственно во время работы программы,
что позволяет получить более широкие возможности. В частности, меха-
низм динамического SQL позволяет:
1. Выполнять операторы DDL, либо другие операторы, выполнение
которых запрещено в статическом коде PL/SQL.
2. Реализовать более гибкий подход в выполнении операторов DML
за счет их формирования «на лету».
3. Использовать функции пакета DBMS_SQL для увеличения произ-
водительности запросов.
Для выполнения запросов, которые не возвращают данных, либо
возвращают одиночную строку используется конструкция EXECUTE IM-
MEDIATE (начиная с Oracle 8i). Ее синтаксис:
EXECUTE IMMEDIATE dynamic_string
[INTO {define_variable[,
define_variable]... | record}]
[USING [IN | OUT | IN OUT] bind_argument
[, [IN | OUT | IN OUT] bind_argument]...]
[{RETURNING | RETURN} INTO
bind_argument[, bind_argument]...];
где dynamic_string – SQL-запрос либо анонимный PL/SQL блок; de-
fine_variable – переменные, через которые осуществляется связь с выпол-
няемым запросом; bind_argument – список привязываемых аргументов.
Выражение RETURNING INTO используется только для DML-выражений.
Примеры использования конструкции:
EXECUTE IMMEDIATE ’DROP TABLE :tab’
USING table_name;
     3.4. Динамический SQL

      При создании приложений PL/SQL часто возникает ситуация, когда
структура SQL-запросов заранее не определена и может изменяться в зави-
симости от каких-либо условий. Для решения ситуаций подобного типа
используется механизм, называемый динамический SQL. Суть этого меха-
низма заключается в том, что запросы внутри блоков PL/SQL формируют-
ся в виде текстовых строк непосредственно во время работы программы,
что позволяет получить более широкие возможности. В частности, меха-
низм динамического SQL позволяет:
      1. Выполнять операторы DDL, либо другие операторы, выполнение
которых запрещено в статическом коде PL/SQL.
      2. Реализовать более гибкий подход в выполнении операторов DML
за счет их формирования «на лету».
      3. Использовать функции пакета DBMS_SQL для увеличения произ-
водительности запросов.
      Для выполнения запросов, которые не возвращают данных, либо
возвращают одиночную строку используется конструкция EXECUTE IM-
MEDIATE (начиная с Oracle 8i). Ее синтаксис:

     EXECUTE IMMEDIATE dynamic_string
     [INTO {define_variable[,
             define_variable]... | record}]
     [USING [IN | OUT | IN OUT] bind_argument
     [, [IN | OUT | IN OUT] bind_argument]...]
     [{RETURNING | RETURN} INTO
            bind_argument[, bind_argument]...];

где dynamic_string – SQL-запрос либо анонимный PL/SQL блок; de-
fine_variable – переменные, через которые осуществляется связь с выпол-
няемым запросом; bind_argument – список привязываемых аргументов.
Выражение RETURNING INTO используется только для DML-выражений.
      Примеры использования конструкции:

     EXECUTE IMMEDIATE ’DROP TABLE :tab’
        USING table_name;
                                    46