Как динамически создать спецификацию пакета и тело, используя команду «немедленное выполнение»? - PullRequest
1 голос
/ 03 марта 2012

У меня есть пакет, который содержит более 2000 строк. У меня вопрос, могу ли я создавать пакеты динамически, используя execute immediate?

1 Ответ

1 голос
/ 03 марта 2012

Вам нужно будет использовать интерфейс ассоциативного массива DBMS_SQL, предполагая, что "2000 строк" соответствует тексту объемом более 32 тыс.Это означает, что вам нужно загрузить DDL в несколько элементов ассоциативного массива, прежде чем передавать его в метод DBMS_SQL.PARSE.Нечто подобное работает

SQL> ed
Wrote file afiedt.buf

  1  declare
  2    l_sql dbms_sql.varchar2a;
  3    c     integer;
  4  begin
  5    l_sql(1) := 'CREATE OR REPLACE PACKAGE pkg_dynamic ';
  6    l_sql(2) := 'AS ';
  7    l_sql(3) := '  PROCEDURE my_proc;';
  8    l_sql(4) := 'END;';
  9    c := dbms_sql.open_cursor;
 10    dbms_sql.parse( c, l_sql, 1, 4, true, dbms_sql.native );
 11* end;
SQL> /

PL/SQL procedure successfully completed.

SQL> desc pkg_dynamic;
PROCEDURE MY_PROC

Но я бы сильно сомневался, почему вы пытаетесь использовать динамический SQL для создания пакетов.Как правило, нет смысла писать код, который поворачивается и генерирует больше кода.Например, вы вообще не захотите писать Java-приложение, которое развернулось, написало и скомпилировало другое Java-приложение, которое затем кто-нибудь запустит.

...