Oracle PL/SQL進階編程(第十四彈:系統事件觸發器)

查看觸發器源碼

可以通過DBA_TRIGGERSALL_TRIGGERSUSER_TRIGGERS視圖查看觸發器相關信息,也可以通過PL/SQL DEVELOPER等可視化工具查看。

刪除和禁用觸發器

如果不在需要觸發器可以使用 DROP TRIGGER刪除觸發器:
DROP TRIGGER trigger_name;

如果只是暫時地禁用觸發器的執行,可以使用ALTER TRIGGER

ALTER TRIGGER trigger_name DISABLE;
ALTER TRIGGER trigger_name ENABLE;

如果要禁用 或啓用一個表上的所有觸發器,可以使用:

ALTER TABLE emp DISABLE ALL TRIGGERS;
ALTER TABLE emp ENABLE ALL TRIGGERS;

名稱與權限的管理

觸發器的名稱空間與子程序、包和表的名稱空間不同,觸發器存在於單獨的名稱空間,因此可以與表和過程同名,只需要確保在一個方案下所有的觸發器名稱不同即可,也就是說可以在emp表上建立一個emp觸發器。
雖然觸發器和表可以使用相同的名稱,編譯不會報錯,但是這樣會導致整個系統混亂,所以實際應用中,我們應該避免這種情況。

觸發器是一個存儲在數據庫字典中的方案對象,除了觸發器本身要具有一定的訪問權限外,此觸發器的所有者必須對觸發器所引用的對象具有必要的對象特權,而且這些特權必須被直接賦予,不能通過角色進行賦予。比如在創建系統級的觸發器時,創建者除了具有CREATE TRIGGER權限或CREATE ANY TRIGGER權限外,也需要具有ADMINISTER DATABABSE TRIGGER權限。
GRANT ADMINISTER DATABASE TRIGGER TO scott;
有了這個權限後,scott用戶就可以創建DATABASE級別的系統觸發器了。

通過查詢dba_sys_privs可以查詢用戶當前的 用戶權限和角色權限。

觸發器相關的權限列表:

權限名稱 描述
CREATE TRIGGER 允許用戶在自己的方案中創建一個觸發器
CREATE ANY TRIGGER 允許用戶在除SYS以外的方案中創建觸發器,但是注意不要在數據字典表上創建觸發器
ALTER ANY TRIGGER 允許用戶在除SYS以外的方案中修改觸發器,比如對觸發器進行啓用、禁用或重新編譯,但是如果授權用戶沒有CREATE ANY TRIGGER的權限,則不能對觸發器的代碼進行更改
DROP ANY TRIGGER 允許用戶刪除任何除SYS以外的方案中的觸發器
ADMINISTER DATABSE TRIGGER 允許用戶在數據庫上創建或修改系統觸發器,授權用戶也必須具有CREATE TRIGGER或CREATE ANY TRIGGER的權限

在瞭解了這些權限後,當用戶在創建或修改觸發器時出現權限不足的問題時,可以使用DBA用戶登錄,使用GRANT語句爲用戶分配這些權限。

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