Oracle-11g-R2

觸發器需要聲明 dbms_alert

  • November 3, 2015

觸發器給了我以下資訊:

ORA-04098: trigger 'adminuser.DB_ERROR_CHANGE_TRIG' is invalid and failed re-validation

這是在從客戶端數據庫的導入中更改架構/觸發器/等時。

我跑了

show errors trigger adminuser.db_error_change_trig

結果是:

LINE/COL ERROR
-------- -----------------------------------------------------------------
2/5      PL/SQL: Statement ignored
2/5      PLS-00201: identifier 'DBMS_ALERT' must be declared

現在,Google搜尋,我發現我需要向我所做的公共使用者授予顯式執行權限

grant execute on dms_public to public

然而,這並沒有奏效。

我怎樣才能確定發生了什麼,以及如何解決這個問題。第三,dbms_alert 模式是特定的嗎?意思是,我的理解是對象的全名是 SYS.dbms_alert,是否有另一個模式用於另一個模式或者是一個全域模式?

我認為您可能缺少 dbms_alert for adminuser 模式的同義詞。對象授權和同義詞通常都是必需的(除非您擁有該對象)。

嘗試以 sys 帳戶關注,也許它會解決問題。

create or replace synonym adminuser.dbms_alert for sys.dbms_alert;

如果您不想創建同義詞,則應使用 sys.dbms_alert,如果您創建如上所示的同義詞,則在程式碼中僅使用 dbms_alert 就足夠了。

您確定public使用者而不是角色嗎?通過角色獲得的特權在 PL/SQL 上下文中沒有影響。您需要向使用者授予足夠的 sys.dbms_alert 權限。

引用自:https://dba.stackexchange.com/questions/51389