2010-09-06 86 views
3

我需要修改包中的一個過程。我需要觸及聲明和實現。由於每次修改都在維護修補程序文件,因此我希望修改很少。替換部分Oracle包

我可以用更改過的程序更新軟件包(如果是,如何?),還是需要提供完整的軟件包定義和實現?

回答

13

您需要替換整個包裝規格和正文 - 您不能僅對包裝的一部分進行操作。

2

你不能。據我所知,避免引用對象失效的唯一方法是不要觸摸你的包聲明,並且只執行CREATE OR REPLACE PACKAGE BODY

1

由於聲明發生變化,您可能會考慮將新程序放入新程序包中,以避免觸摸現有程序。使用新版本過程的軟件包必須進行適應性修改,以反映聲明中的更改(除非它是具有默認值的新參數)。

1

如果您使用的是Oracle 11g,並且希望儘量減少其他對象的失效,請確保將新聲明放置在軟件包規範的尾端處。

3

只是爲了與其他人相矛盾。 。 。從技術上說,你可以這麼做 - 你可以寫一些東西,這些東西包含在你的補丁文件中,從數據庫中檢索現有的包源(使用USER_SOURCE),應用你的補丁,然後使用EXECUTE IMMEDIATE重新編譯這個包。

但是,我認爲這不是一個好主意 - 基於補丁的修復變得非常難以追蹤,特別是一旦涉及多個修補程序和多個數據庫。把整個文件放到源代碼控制中會好很多 - 你的補丁應該仍然清晰可見。

如果補丁是針對第三方軟件包的,請考慮將其打包 - 以便除了補丁之外,所有內容都是直通的。或者將你的補丁放到一個獨立的包中,這個包叫第一個。仍然存在對原始軟件包的更改可能與您的補丁不兼容的危險。

+0

+1與其他人相矛盾 – 2010-11-15 21:31:20