2014-02-19 32 views
0

我已經在我的oracle數據庫中構建了自己的表的存儲庫。Oracle:在不寫入文件的情況下動態創建包腳本

我使用此存儲庫爲每個表創建標準化的包。 到目前爲止,我寫了一堆腳本到utitlity文件夾中。

我不想通過文件系統再去那種額外的方式了。

這是一個例子文件:

CREATE OR REPLACE PACKAGE vpk_0003_produkte 
AS 

    TYPE t_cursor IS REF CURSOR; 

    PROCEDURE p_insert (p_rc     OUT NUMBER, 
         p_rc_text    OUT VARCHAR2, 
         p_logsql   IN  NUMBER, 
         p_logperformance IN  NUMBER, 
         p_user_id   IN  NUMBER, 
         p_mandant   IN NUMBER, 
         -- PK Columns 
    p_id IN OUT x_0003_produkte.id%TYPE 
         -- Other Columns 
, p_requestid IN  x_0003_produkte.requestid%TYPE); 

    PROCEDURE p_update (p_rc     OUT NUMBER, 
         p_rc_text    OUT VARCHAR2, 
         p_logsql   IN  NUMBER, 
         p_logperformance IN  NUMBER, 
         p_user_id   IN  NUMBER, 
         p_mandant   IN NUMBER, 
         p_where   IN  VARCHAR2, 
         -- PK Columns 
    p_id IN OUT x_0003_produkte.id%TYPE 
         -- Other Columns 
, p_requestid IN  x_0003_produkte.requestid%TYPE); 

END vpk_0003_produkte; 

是否有直接而不需要編寫一個文件來執行這些線的方法嗎? 我知道「OPEN CURSOR FOR」與包含SELECT的變量一起獲取數據。但如何執行/寫入?

其他信息:一個軟件包代碼很容易擁有27.000個字符!和約1000條線路。

謝謝。

回答

0

如果你能組裝包裝DDL的整個源到一個單一的VARCHAR2(32000)局部變量,你應該能夠使用EXECUTE IMMEDIATE運行DDL

EXECUTE IMMEDIATE l_your_ddl_stmt; 

根據不同的Oracle版本,你可以如果DDL語句可能超過32000字節,則調用EXECUTE IMMEDIATE並使用CLOB。您還可以使用dbms_sql傳遞組合到要執行的DDL中的VARCHAR2(4000)字符串集合。

假設您正在將生成的代碼檢入到源代碼管理中,而不是僅僅檢入生成包的代碼,那麼在文件系統上生成文件作爲中間步驟可能會更容易,因爲它允許你既要提交源代碼管理,又要在數據庫中創建對象。

相關問題