ORA-04061錯誤

5、查找錯誤:
select do.obj# d_obj,do.name d_name, do.type# d_type, po.obj# p_obj,
    po.name p_name,to_char(p_timestamp,'DD-MON-YYYY HH24:MI:SS') "P_Timestamp",
    to_char(po.stime ,'DD-MON-YYYY HH24:MI:SS') "STIME",
    decode(sign(po.stime-p_timestamp),0,'SAME','*DIFFER*') X
from sys.obj$ do, sys.dependency$ d, sys.obj$ po
where P_OBJ#=po.obj#(+) and D_OBJ#=do.obj#
    and do.status=1 /*dependent is valid*/
    and po.status=1 /*parent is valid*/
    and po.stime!=p_timestamp /*parent timestamp not match*/
order by 2,1;

**************************************************************************************
我的也是這個錯誤,但是重新連接數據庫就好了
日誌
   
12月10日
解決Oracle PL/SQL Package奇怪的ORA-04065/ORA-04061

    從昨天開始編寫一個PL/SQL類型體的時候出現奇怪的錯誤:
ORA-04068: 已丟棄程序包的當前狀態
ORA-04061: package body “XXXXXX” 的當前狀態失效
ORA-04065: 未執行,已更改或刪除 package body “XXXXX”
……………
    該錯誤非常詭異,當使用我的腳本創建schema內所有對象後,第一次執行測試代碼時候會出錯,但是再次執行就沒有問題了。
    仔細檢查了這個package,以及schema下的所有對象,發現狀態都是正常的,沒有無效的對象。在網上搜索,發現也有別人碰到這個問題,並且向Oracle的技術支持求助。技術支持回覆了一段SQL,說是可以找到依賴的無效對象:
select do.obj# d_obj,do.name d_name, do.type# d_type, po.obj# p_obj,
    po.name p_name,to_char(p_timestamp,'DD-MON-YYYY HH24:MI:SS') "P_Timestamp",
    to_char(po.stime ,'DD-MON-YYYY HH24:MI:SS') "STIME",
    decode(sign(po.stime-p_timestamp),0,'SAME','*DIFFER*') X
from sys.obj$ do, sys.dependency$ d, sys.obj$ po
where P_OBJ#=po.obj#(+) and D_OBJ#=do.obj#
    and do.status=1 /*dependent is valid*/
    and po.status=1 /*parent is valid*/
    and po.stime!=p_timestamp /*parent timestamp not match*/
order by 2,1;
    執行上述語句後發現結果爲空(我想這個語句可能在別的地方可以用到)。鬱悶中再次檢查了package body的代碼,突然注意到在代碼中一個使用序列器的insert語句。該序列器是在創建package之前創建的。序列器第一次使用的情況同以後使用有些不同,難道是這個原因造成的?於是嘗試着在創建序列器之後立刻執行:
select myseq.nextval from dual;
    然後再次執行測試腳本,發現一切正常了——還真是這個原因啊。
*******************************************************************************************************

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章