Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


触发器

📄字数 1.8K
👁️阅读量 加载中...

在 PL/SQL 中,触发器(Trigger) 是一种特殊的存储程序,它会在特定的数据库事件(如 INSERT、UPDATE、DELETE)发生时自动执行。触发器主要用于实现数据完整性约束、审计跟踪或复杂的业务规则。

创建、删除、修改、重编译触发器

在数据库对象章节有相关内容的详细描述,参考触发器

查看触发器

触发器保存在数据库的字典中,几个常用的字典视图如下:

  • SYS_TRIGGERS:sys_triggers 系统表用于存储、管理系统库和用户库中所有创建的触发器信息,查看需在系统库下有系统权限。

  • ALL_TRIGGERS:all_triggers 系统视图用于存储和管理创建的所有触发器信息。

  • DBA_TRIGGERS:dba_triggers 系统视图用于存储和管理当前库中所有创建的触发器,查看需要在当前库下且有查看权限。

  • USER_TRIGGERS:user_triggers 系统视图用于查询当前用户创建的所有触发器信息。

示例

sql
SQL> SELECT * FROM sys_triggers;

+-------+-----------+---------+---------+---------+--------------------+-----------+------------+-----------+----------------------+----------+--------+--------------------------+--------+-------+--------+----------+-----------+-----------+
| DB_ID | SCHEMA_ID | USER_ID | OBJ_ID  | TRIG_ID |     TRIG_NAME      | TRIG_TIME | TRIG_EVENT | TRIG_TYPE |      TRIG_COND       | LANGUAGE | DEFINE |       CREATE_TIME        |
 ENABLE | VALID | IS_SYS | COMMENTS | RESERVED1 | RESERVED2 |
+-------+-----------+---------+---------+---------+--------------------+-----------+------------+-----------+----------------------+----------+--------+--------------------------+--------+-------+--------+----------+-----------+-----------+
| 1     | 1         | 1       | 1048587 | 1048588 | TRG_TEST_NOT_EXIST | 1         | 1          | 1         | <NULL>               | PLSQL    | <CLOB> | 2025-07-01 19:31:29.403  |
 T      | F     | F      | <NULL>   | <NULL>    | <NULL>    |
| 1     | 1         | 1       | 1048582 | 1048589 | TRIG_TEST4         | 4         | 3          | 1         | <NULL>               | PLSQL    | <CLOB> | 2025-07-01 19:31:29.413  |
 T      | F     | F      | <NULL>   | <NULL>    | <NULL>    |
| 1     | 1         | 1       | 1048582 | 1048591 | TRG_TEST2          | 4         | 2          | 1         | ("OLD"."ID") >= (10) | PLSQL    | <CLOB> | 2025-07-01 19:33:14.321  |
 T      | F     | F      | <NULL>   | <NULL>    | <NULL>    |
+-------+-----------+---------+---------+---------+--------------------+-----------+------------+-----------+----------------------+----------+--------+--------------------------+--------+-------+--------+----------+-----------+-----------+


SQL> SELECT * FROM all_triggers;

+-------+-----------+---------+---------+---------+--------------------+-----------+------------+-----------+----------------------+----------+--------+--------------------------+--------+-------+--------+----------+-----------+-----------+
| DB_ID | SCHEMA_ID | USER_ID | OBJ_ID  | TRIG_ID |     TRIG_NAME      | TRIG_TIME | TRIG_EVENT | TRIG_TYPE |      TRIG_COND       | LANGUAGE | DEFINE |       CREATE_TIME        |
 ENABLE | VALID | IS_SYS | COMMENTS | RESERVED1 | RESERVED2 |
+-------+-----------+---------+---------+---------+--------------------+-----------+------------+-----------+----------------------+----------+--------+--------------------------+--------+-------+--------+----------+-----------+-----------+
| 1     | 1         | 1       | 1048587 | 1048588 | TRG_TEST_NOT_EXIST | 1         | 1          | 1         | <NULL>               | PLSQL    | <CLOB> | 2025-07-01 19:31:29.403  |
 T      | F     | F      | <NULL>   | <NULL>    | <NULL>    |
| 1     | 1         | 1       | 1048582 | 1048589 | TRIG_TEST4         | 4         | 3          | 1         | <NULL>               | PLSQL    | <CLOB> | 2025-07-01 19:31:29.413  |
 T      | F     | F      | <NULL>   | <NULL>    | <NULL>    |
| 1     | 1         | 1       | 1048582 | 1048591 | TRG_TEST2          | 4         | 2          | 1         | ("OLD"."ID") >= (10) | PLSQL    | <CLOB> | 2025-07-01 19:33:14.321  |
 T      | F     | F      | <NULL>   | <NULL>    | <NULL>    |
+-------+-----------+---------+---------+---------+--------------------+-----------+------------+-----------+----------------------+----------+--------+--------------------------+--------+-------+--------+----------+-----------+-----------+

SQL> SELECT * FROM dba_triggers;

+-------+-----------+---------+---------+---------+--------------------+-----------+------------+-----------+----------------------+----------+--------+--------------------------+--------+-------+--------+----------+-----------+-----------+
| DB_ID | SCHEMA_ID | USER_ID | OBJ_ID  | TRIG_ID |     TRIG_NAME      | TRIG_TIME | TRIG_EVENT | TRIG_TYPE |      TRIG_COND       | LANGUAGE | DEFINE |       CREATE_TIME        |
 ENABLE | VALID | IS_SYS | COMMENTS | RESERVED1 | RESERVED2 |
+-------+-----------+---------+---------+---------+--------------------+-----------+------------+-----------+----------------------+----------+--------+--------------------------+--------+-------+--------+----------+-----------+-----------+
| 1     | 1         | 1       | 1048587 | 1048588 | TRG_TEST_NOT_EXIST | 1         | 1          | 1         | <NULL>               | PLSQL    | <CLOB> | 2025-07-01 19:31:29.403  |
 T      | F     | F      | <NULL>   | <NULL>    | <NULL>    |
| 1     | 1         | 1       | 1048582 | 1048589 | TRIG_TEST4         | 4         | 3          | 1         | <NULL>               | PLSQL    | <CLOB> | 2025-07-01 19:31:29.413  |
 T      | F     | F      | <NULL>   | <NULL>    | <NULL>    |
| 1     | 1         | 1       | 1048582 | 1048591 | TRG_TEST2          | 4         | 2          | 1         | ("OLD"."ID") >= (10) | PLSQL    | <CLOB> | 2025-07-01 19:33:14.321  |
 T      | F     | F      | <NULL>   | <NULL>    | <NULL>    |
+-------+-----------+---------+---------+---------+--------------------+-----------+------------+-----------+----------------------+----------+--------+--------------------------+--------+-------+--------+----------+-----------+-----------+


SQL> SELECT * FROM user_triggers;

+-------+-----------+---------+---------+---------+--------------------+-----------+------------+-----------+----------------------+----------+--------+--------------------------+--------+-------+--------+----------+-----------+-----------+
| DB_ID | SCHEMA_ID | USER_ID | OBJ_ID  | TRIG_ID |     TRIG_NAME      | TRIG_TIME | TRIG_EVENT | TRIG_TYPE |      TRIG_COND       | LANGUAGE | DEFINE |       CREATE_TIME        |
 ENABLE | VALID | IS_SYS | COMMENTS | RESERVED1 | RESERVED2 |
+-------+-----------+---------+---------+---------+--------------------+-----------+------------+-----------+----------------------+----------+--------+--------------------------+--------+-------+--------+----------+-----------+-----------+
| 1     | 1         | 1       | 1048587 | 1048588 | TRG_TEST_NOT_EXIST | 1         | 1          | 1         | <NULL>               | PLSQL    | <CLOB> | 2025-07-01 19:31:29.403  |
 T      | F     | F      | <NULL>   | <NULL>    | <NULL>    |
| 1     | 1         | 1       | 1048582 | 1048589 | TRIG_TEST4         | 4         | 3          | 1         | <NULL>               | PLSQL    | <CLOB> | 2025-07-01 19:31:29.413  |
 T      | F     | F      | <NULL>   | <NULL>    | <NULL>    |
| 1     | 1         | 1       | 1048582 | 1048591 | TRG_TEST2          | 4         | 2          | 1         | ("OLD"."ID") >= (10) | PLSQL    | <CLOB> | 2025-07-01 19:33:14.321  |
 T      | F     | F      | <NULL>   | <NULL>    | <NULL>    |
+-------+-----------+---------+---------+---------+--------------------+-----------+------------+-----------+----------------------+----------+--------+--------------------------+--------+-------+--------+----------+-----------+-----------+

反汇编触发器

将触发器反汇编为类似汇编语言的指令码输出。

语法格式