oracle中alter package時包含drop操作報錯ORA-20008

來源:互聯網
上載者:User

一般情況下,我們如果alter操作,是不會觸發drop操作。但是在某些特別的情況下,alter package的操作在遞迴SQL中,是能看到drop操作的。

我們這個環境中有trigger,一旦有drop操作的時候,是會報錯ORA-20008,且被阻攔的。

我們看到下面,我們只是alter package而已。但是在關係到其關聯對象的時候,竟然發生了drop的動作:
SQL> alter package MYUSER1.MYP_IIA_IS_PACKAGE compile body;
alter package MYUSER1.MYP_IIA_IS_PACKAGE compile body
ORA-04045: errors during recompilation/revalidation of MYUSER1.MYP_ABCD_OUN_PACKAGE
ORA-20008: 該對象被其他對象依賴,不能刪除,請檢查dba_dependencies!
ORA-06512: at line 31

在10046的trace中:

PARSING IN CURSOR #10 len=49 dep=2 uid=353 oct=78 lid=353 tim=24012153459082 hv=0 ad='7d9f7d28'
drop type "MYUSER1".SYS_PLSQL_315410_1679_1 force
END OF STMT

而引起這個問題的原因,是在package中,使用pipelined的管道函數,會自動產生SYS_PLSQL_%s_%c_%v的type。%v表示version 。

這些type在package重新編譯的時候,需要regenerate的type,會迴圈的刪除old version的type,再create new version type。也就是說,在編譯的時候,會先drop SYS_PLSQL_%s_%c_1,再create SYS_PLSQL_%s_%c_2;如果再編譯,會drop SYS_PLSQL_%s_%c_2,再create SYS_PLSQL_%s_%c_1……

即在myuser1.myp_abcd_oun_package中有使用pipelined,所以會產生這樣的type:

create or replace package body myuser1.myp_abcd_oun_package is
……
function splitstr(p_string in varchar2, p_delimiter in varchar2)
return str_split
pipelined
as
v_length number := length(p_string);
v_start number := 1;
v_index number;
begin
while(v_start <= v_length)
loop
v_index := instr(p_string,

而我的package,myuser1.MYP_IIA_IS_PACKAGE,是會引用到myp_abcd_oun_package,所以編譯MYP_IIA_IS_PACKAGE的時候,也會regenerate的type。

解決方案:

先把myp_abcd_oun_package編譯成功,在編譯其他的package,就不會需要regenerate type,也就不會再報關於那個trigger的錯了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.