3.9.5 与触发器有关的数据字典

触发器是一种特殊的存储程序,从被创建之时起,触发器就被存储在数据库中,直到被删除。触发器与一般存储过程或者存储函数的区别在于触发器可以自动执行,而一般的存储过程或者存储函数需要调用才能执行。

与触发器有关的数据字典有:

·USER_TRIGGERS:存储当前用户所拥有的触发器。

·DBA_TRIGGERS:存储管理员所拥有的触发器。

·ALL_TRIGGERS:存储所有的触发器。

·USER_OBJECTS:存储当前用户所拥有的对象,包括触发器。

·DBA_OBJECTS:存储管理员所拥有的对象,包括触发器。

·ALL_OBJECTS:存储数据库中所有的对象,包括触发器。

例如,要想了解触发器TRG_1的类型、触发事件、所基于的对象类型和名称、状态等信息,可以查询视图user_triggers。


SQL>column triggering_event format a20

SQL>column table_name format a10;

SQL>SELECT trigger_type, triggering_event, base_object_type,

TABLE_NAME, status

FROM user_triggers

WHERE trigger_name='TRG_1';

TRIGGER_TYPE TRIGGERING_EVENT TABLE_NAME STATUS


INSTEAD OF INSERT OR DELETE VIEW_2 ENABLED


触发器中的代码可以从数据字典视图user_triggers的trigger_body列中获得,如果想查看触发器的代码,可以对这个列进行检索。例如:


SQL>SELECT trigger_body FROM user_triggers WHERE trigger_name='TRG_1';


查询的结果为:


TRIGGER_BODY

BEGIN

if INSERTing then

INSERT INTO emp(ename, empno, sal, deptno)

VALUES(:new.ename,:new.empno,:new.sal,:new.deptno);

END if;

if deleting then

DELETE FROM emp WHERE empno=:old.empno;

END if;

END;


触发器的信息也可以从其他视图中获得。例如,视图user_objects记录了当前用户所拥有的所有对象,其中包括触发器。在这个视图中,触发器是object_type列的值为TRIGGER的对象。