-2
創建過程的第一步是檢查表XYZ是否存在。如果確實如此,則繼續在表XYZ上進一步計算,但如果不存在,則創建該表,然後繼續進行計算(在表中插入新記錄)。刪除在過程中創建的表,刪除過程中的編譯錯誤
因此,爲了測試目的,我放下了桌子。在我放棄表格的那一刻,我收到了程序的編譯錯誤,說該表格不存在。
我該如何解決這個問題。我無法改變邏輯。
創建過程的第一步是檢查表XYZ是否存在。如果確實如此,則繼續在表XYZ上進一步計算,但如果不存在,則創建該表,然後繼續進行計算(在表中插入新記錄)。刪除在過程中創建的表,刪除過程中的編譯錯誤
因此,爲了測試目的,我放下了桌子。在我放棄表格的那一刻,我收到了程序的編譯錯誤,說該表格不存在。
我該如何解決這個問題。我無法改變邏輯。
需要檢查表是否存在的代碼表示軟件架構不好。應該不需要動態創建表格。這是一種反模式(至少在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()
它將編譯該過程。
請發表您的代碼(相關部分)。 – Aleksej
發佈您的代碼。你也應該在'table'的每個引用中使用'execute immediate',否則可能會退出。否則,你會得到編譯錯誤。 – Plirkee
嗨Plirkee,是的我試着用字符串中的查詢立即執行。但查詢非常大所以我得到錯誤字符串文字太長。 – SYMA