2009-10-13 58 views
1

我有幾個SQL腳本設置應用程序的數據庫。幾乎沒有創建包含少量視圖引用的包的腳本,並且同樣具有創建包含引用的視圖的腳本。簡化包和視圖的創建

有沒有辦法將這兩個腳本分開,然後分別單獨創建包或視圖。

或任何其他工作。

+0

添加'循環參考'文本希望它會被添加到SO索引,並幫助其他人找到這個好問題和答案。 – 2017-09-19 23:17:16

回答

1

我想你必須手動計算參考圖形,然後相應地命令腳本的執行。因此,您需要創建一組腳本views1.sql,views2.sql,...和packages1.sql,packages2.sql,... Views1.sql僅包含未引用任何包的視圖。 Packages1.sql僅包含未引用任何視圖的軟件包。 Views2.sql僅包含引用來自packages1.sql的包的視圖。 Packages2.sql僅包含引用來自views1.sql的視圖的軟件包。

依此類推,直到完成。

+0

@ rics。 +1。感謝你的及時回覆。事實上,我通過按順序調用腳本來做同樣的事情。想知道是否有更好的方法來處理它。 – Viky 2009-10-13 07:09:01

+0

我有一個引用視圖的包,其中相同的視圖引用了包中的另一個函數。不知道這個想法是否有效。我最終編譯了Spec,然後是引用包的視圖,然後是Body。謝謝。 – 2017-09-19 23:13:54

3

你可以只創建第一個使用語法

CREATE OR REPLACE FORCE VIEW 

即使還不存在引用的對象,然後創建您的所有包裝規格,然後機構內創建一個視圖中的所有的意見。

現在你可以編譯所有無效的對象,或只是讓Oracle照顧它(見本鏈接)

Ask Tom - "invalid objects"

4

首先,創建包規範。

其次,創建視圖 - 它們引用規範,而不是正文。

三,創建包體 - 它們引用視圖。

+0

工作就像一個魅力。我們的DBA比較喜歡所有的DDL編譯,所以這比編譯無效更好。第一次遇到這種情況時,有一個視圖引用了包中的函數,而包中的另一個函數引用了相同的視圖。帶我一邊找到這個 - 使用循環引用作爲我的搜索條件。 – 2017-09-19 23:11:20