Вам нужно будет использовать интерфейс ассоциативного массива 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-приложение, которое затем кто-нибудь запустит.