2014-06-13 39 views
2

我想實現什麼,本文說:http://www.rwijk.nl/AboutOracle/psdua.pdf如何執行所有的PL/SQL目錄中的文件(install_db腳本)

(幾句話,我已經SQL文件創建數據庫對象例如目錄'myApp/tables /','myApp/priviledges /','myApp/sequences /'中的表格,特權,序列,索引等等,我想執行這些文件來安裝我的數據庫。

還有就是應該是什麼樣子的install_db.sql腳本p11-12但SQL文件的執行過程的例子是硬編碼:

@@&tables_path.SCA_OPNAMES.sql 
@@&tables_path.SCA_METERSTANDEN.sql 
@@&sequences_path.SCA_MSD_SEQ1.sql 
@@&sequences_path.SCA_ONE_SEQ1.sql 
@@&indexes_path.MSD_ONE_FK1_I.sql 
@@&privs_path.privileges.sql &SCHEMAPREFIX 

我寧願在一個給定執行所有文件目錄,但它似乎很棘手。

有一個很好的帖子來獲取目錄中的文件列表:https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:439619916584這是很好的工作。

所以在這一點上,我有一個臨時表中的文件列表,現在我想執行這些文件。

令人驚訝的是我堅持這一步。 我願做這樣的事情:

for tab in (select filename from dir_list) loop 
    @tab.filename; 
end loop; 

,但它不工作,因爲我一個PL/SQL過程中我不是。我可以從pl/sql程序執行文件嗎?答案不是很清楚,我讀了這個問題的相反的答案。

感謝您的幫助,

+1

不,[你不能混合使用SQL * Plus'@'和PL/SQL塊](http://stackoverflow.com/a/21112230/266304)。海事組織你應該維護一個主要的腳本文件來運行;一開始你必須按順序運行一些東西,比如在引用它們的那些表之前創建主鍵,這很難做到動態的。如果您可以通過文件命名約定來解決這個問題,並且確實不想維護主腳本,那麼您可以從shell腳本構建主腳本,然後將其提交給SQL * Plus。我不認爲你可以在SQL * Plus中做到這一點。 –

+0

如果您已經使用java來構建列表,那麼您不能使用java來構建並執行命令行來運行嗎?我從來沒有嘗試從Java內的Oracle,但我知道它適用於「正常」的Java。 – Bob

+0

[This](http://www.dba-oracle.com/t_execute_operating_system_os_command_oracle.htm)應該告訴你如何。 – Bob

回答

0

您可以嘗試使用動態PL/SQL。
例如,編寫一個PL/SQL過程,將 - 將文件內容讀入變量,然後使用EXECUTE IMMEDIATE動態SQL構造執行PL/SQL。

相關問題