我有一個sql腳本文件,我用它來安裝表,觸發器,序列和最後一個包。該包使用由sql腳本文件創建的表。該程序包被指定爲在應用程序中發生事件時運行,即當應用程序觸發器被觸發時程序包運行。PLSQL - 安裝工作或者
所有的軟件包都會執行批量選擇插入到臨時表中。就是這樣。
現在,問題是當我第一次執行乾淨安裝時,程序包會被觸發並運行,但不會將數據插入到臨時表中。但是,當下一個事件發生時,包被觸發並且數據被插入到分段穩定器中並繼續正常工作。所以最初我認爲這可能是一個初始化錯誤。
但是,當我刪除包含該包的sql腳本文件創建的所有對象並重新運行sql腳本文件時,該包在第一個事件本身發生並繼續正常工作時工作得很好。
所以這不能是一個初始化錯誤。
但是,再次(因爲我失去了理智)我放棄了一切,重新運行腳本文件,我發現我第一次注意到同樣的行爲。然後我再次放下所有東西,並重新運行第一次運行的腳本文件。
我不知道爲什麼它可以交替工作,這太奇怪了。
實際上表不調用包。第二件事是當我運行查詢INVALID對象時,它重新創建了0行。我嘗試使用sleep(),甚至將包的安裝從腳本文件中移出。但行爲重複。我打算手動安裝這個,看看我是否得到相同的行爲。 – user547453
@Glenn ....這確實是一個潛在的同義詞,成爲無效evrytime我放棄了包。同義詞是爲包創建的。謝謝你指出我朝着正確的方向。但我認爲INVALID對象在手動編譯之前不會自動重新編譯。 – user547453
@ user547453很高興你找到它。可以令人沮喪的發現。查看[關於對象相關性和對象失效](http://docs.oracle.com/cd/E11882_01/server.112/e25494/general007.htm#ADMIN12491)'當引用了無效的依賴對象時,將自動進行重新編譯.'當無效對象被命中時,嘗試重新編譯,但是命中無效對象的作業仍然失敗,因爲它無效。如果編譯成功,則下一個命中結束。再往下看一下'utl_recomp':在安裝腳本之後運行可能很有用。 – Glenn