Oracle-11g-R2
觸發器需要聲明 dbms_alert
觸發器給了我以下資訊:
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 權限。