2015-10-03 17 views
0

我正面臨此錯誤。包裝現有狀態已失效

我有兩個模式實施模式A和架構B

架構B包含在其中的值被插入的表MY_TABLE。

還有

該觸發寫在schemaB的MY_TABLE被調用過程,它存在於模式A.用於在MY_TABLE schemaB對於每一行

  CREATE OR REPLACE TRIGGER schemaB.my_trigger 
       ON schemaA.my_table 
       FOR EACH ROW 
       BEGIN 
       IF INSERTING THEN 
        schemaA.my_package.my_procedure (:NEW.field_A,NEW.field_B, :NEW.field_C); 
       END IF; 
      EXCEPTION 
       WHEN OTHERS THEN 
       Insert into my_log(DBMS_UTILITY.format_error_stack,sysdate); 
      END my_trigger; 
      / AFTER INSERT 
寫入

然而,當一個triggger my_trigger觸發器被解僱,我在我的日誌

  ERROR: ORA-04061: existing state of package "schemaA.my_package" has been invalidated 
      ORA-04065: not executed, altered or dropped package "schemaA.my_package" 
      ORA-06508: PL/SQL: could not find program unit being called: "schemaA.my_package" 
      ORA-06512: at "schemaB.my_trigger", line 17  10/1/2015 6:38:07 PM 

而且在schemaA的過程聲明爲PRAGMA_AUTONOMOUS_TRANSA提示以下錯誤: CTION

這是一些補助金問題,因爲我檢查了所有的補助金已經給出,我已經檢查了這兩個觸發器和程序 的依賴關係,並且全部似乎都有效。你能幫忙嗎?

我一直在使用語用serially_reusable在調用包,但仍然給了我同樣的錯誤

非常感謝

+0

[「ORA-04068:包的現有狀態已被丟棄ORA-04065:未執行,更改或刪除存儲過程](http:// stackoverflow。com/questions/26646123/ora-04068-existing-state-of-packages-has-been-discarded-ora-04065-not-execute) –

+0

試圖通過使調用包爲串行可重置但仍然是相同的錯誤。 – Dawn

+0

可能你請附上'schemaA.my_package' ddl嗎? –

回答

0

你可以有可能的問題是:

  • 包/程序您呼叫無效 檢查該查詢是否有你在你的包在此使用的包或對象的條目ALL_OBJECTS視圖

    select * from all_objects where status ='INVALID'and owner ='SCHEMA_NAME';

  • 檢查你的軟件包是否有全局變量?如果是,那麼檢查這些變量沒有被任何其他會話改變

  • 以下腳本運行編譯所有對象架構中的

    開始 dbms_utility.compile_schema(「SCHEMA_NAME」,虛假); 結束;

  • 最後一個選項,如果沒有上述工作,然後從您的包中刪除所有程序/功能,添加新的功能,並嘗試從觸發器運行你的功能。檢查是否有效,然後你的包裹處於特殊鎖定狀態。在添加一個新的函數之後,它的狀態將會再次生效,然後你可以添加你所有的實際的funcs/procs並刪除新添加的函數。