查看觸發器源碼
可以通過DBA_TRIGGERS
、ALL_TRIGGERS
、USER_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語句爲用戶分配這些權限。