Динамический SQL, страница 4

IS

BEGIN

EXECUTE IMMEDIATE ddl_str;

END;

SQL> exec STUDY. ExecDDL(‘create table tmp (dt date)’);

CREATE OR REPLACE PROCEDURE execDDL (ddl_str IN VARCHAR2)

AUTHID CURRENT_USER  IS

BEGIN

EXECUTE IMMEDIATE ddl_str;

END;


Сравнение возможностей NDSи пакета DBMS_SQL

Встроенный динамический SQL (NDS)

·  эффективней, чем DBMS_SQL

·  проще в применении, программный код короче

·  работает со всеми типами данных SQL, включая пользовательские объекты и коллекции (DBMS_SQL – только типы данных, совместимые с Oracle7)

·  позволяет выбирать данные из нескольких столбцов прямо в запись, а не только в отдельные переменные

Пакет DBMS_SQL следует использовать, если

·  во время компиляции не известно количество запрошенных столбцов и переменных привязки

·  необходимо выполнить код SQL и PL/SQL произвольной длины (для NDS – не более 32 Кбайт)

·  динамический SQL требуется вызывать из клиентского кода PL/SQL, например из библиотек OracleForms