1
我有一個包含超過2000行的包。我的問題是我可以通過使用execute immediate
動態創建包?如何使用execute immediate動態創建包規格和正文?
我有一個包含超過2000行的包。我的問題是我可以通過使用execute immediate
動態創建包?如何使用execute immediate動態創建包規格和正文?
假設「2000行」等於超過32K的文本,您將需要使用關聯數組DBMS_SQL
接口。這意味着在將它傳遞給DBMS_SQL.PARSE
方法之前,您需要將DDL加載到關聯數組的多個元素中。像這樣的作品
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應用程序。