引用自:http://www.cnblogs.com/yhoralce/p/6817010.html
PLS-00157: AUTHID only allowed on schema-level programs解決辦法 包體的過程使用調用者權限方法
在包體里寫了一個過程,test執行時報錯,但是如果把該過程單獨拿出來創建一個,就能順利執行。
在沒加上調用者權 authid current_user之前,報錯如下
ORA-01031: insufficient privileges。ORA-06512: at "RT_ANN_ODS.ODS_EI_WDNEW", line 1720
查了01031,發現是缺少權限,那么問題就來了,缺少什么權限?
過程能編譯完成,只是測試時候報錯,那么就是缺少調用者權限了。
鎖定了這個問題,就輸入調用者權限即可。
在單一的過程中,調用者權限是這樣用的:
create or replace procedure p_test 2 Authid Current_User ----寫在過程名稱之后,is之前 3 is 4 begin 5 execute immediate 'create sequence SEQ_TBS minvalue 10001 maxvalue 99999 start with 10001 increment by 1 cache 10';
6 end;
於是在包體里的過程名稱后邊加上Authid Current_User ,編譯,報錯如下:
PLS-00157: AUTHID only allowed on schema-level programs
這句話的意思是說,AUTHID只能用字啊頂級的項目,也就是在包里使用才能生效。
查了下錯誤原因 An AUTHID clause was specified for a subprogram inside a package or type. These clauses are only supported for top-level stored procedures, packages, and types.
大致意思就是authid只能用在頂級的存儲過程、包、類型上,不能用在包或類型的子程序上。
在包上加入authid,執行正常了。
create or replace package p_test authid current_user is
……
到此,問題解決。