2017-03-09 36 views
-2

創建過程的第一步是檢查表XYZ是否存在。如果確實如此,則繼續在表XYZ上進一步計算,但如果不存在,則創建該表,然後繼續進行計算(在表中插入新記錄)。刪除在過程中創建的表,刪除過程中的編譯錯誤

因此,爲了測試目的,我放下了桌子。在我放棄表格的那一刻,我收到了程序的編譯錯誤,說該表格不存在。

我該如何解決這個問題。我無法改變邏輯。

+0

請發表您的代碼(相關部分)。 – Aleksej

+1

發佈您的代碼。你也應該在'table'的每個引用中使用'execute immediate',否則可能會退出。否則,你會得到編譯錯誤。 – Plirkee

+0

嗨Plirkee,是的我試着用字符串中的查詢立即執行。但查詢非常大所以我得到錯誤字符串文字太長。 – SYMA

回答

2

需要檢查表是否存在的代碼表示軟件架構不好。應該不需要動態創建表格。這是一種反模式(至少在Oracle中)。但是,我們經常看到這個問題的變化,所以很明顯這種反模式在蓬勃發展。

如果您確實需要實施這樣的解決方案(無論出於何種原因),正確的方法是使用代碼將表格構建代碼與表格分開。爲他們分開包裝。

begin 
    pkg_ddl.build_table_xyz; 
    pkg_calc.run_xyz_job; 
end; 

如果表XYZ不存在pkg_calc.run_xyz_job()無效。但是它的無效性不會阻止pkg_ddl.build_table_xyz()的執行。然後,當外部程序調用pkg_calc.run_xyz_job()它將編譯該過程。