1
私は2000以上の行を含むパッケージを持っています。私の質問は、execute immediate
を使ってパッケージを動的に作成できますか?execute immediateを使用して動的にパッケージスペックとボディを作成するには?
私は2000以上の行を含むパッケージを持っています。私の質問は、execute immediate
を使ってパッケージを動的に作成できますか?execute immediateを使用して動的にパッケージスペックとボディを作成するには?
連想配列DBMS_SQL
を使用する必要があります。「2000行」が32kを超えるテキストに相当すると仮定します。つまり、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アプリケーションを作成することは一般的ではありません。