行级触发器 本章介绍行级触发器机制。大部分例子以INSERT出发器给出,行级触发器可从insert update delete语句触发。 1、介绍 尽管第三个Insert语句是一条SQL语句,但插入TEMP表中两条记录。许多insert语句插入一条记录,但可以用一条语句插入许多行。 2、行级触发器语法: ·Trigger_name 这条语句告诉Oracle什么时候执行触发器.它可能在ORACLE 完整性约束检查前或后执行,可以指定一个Before或after触发器在多语句操作类型上触发,如: BEFORE INSERT OR UPDATE on table_name BEFORE INSERT OR UPDATE OR DELETE on table_name AFTER INSERT OR DELETE on table_name DBMS_STANDARD 包提供了四个boolean函数来区分SQL语句类型。 PACKAGE DBMS_STANDARD IS FUNCTION inserting RETURN BOOLEAN; FUNCTION updating RETURN BOOLEAN; FUNCTION updating (colnam VARCHAR2) RETURN BOOLEAN; FUNCTION deleting RETURN BOOLEAN; etc, END DBMS_STANDARD; 在触发器中可以直接使用函数名称,不需要指定包名: CREATE OR REPLACE TRIGGER temp_aiur AFTER INSERT OR UPDATE ON TEMP FOR EACH ROW BEGIN CASE WHEN inserting THEN dbms_output.put_line ('executing temp_aiur - insert'); WHEN updating THEN dbms_output.put_line ('executing temp_aiur - update'); END CASE; END; 对于Update行级触发器,可以指定被更新的列作为触发器触发条件。 CREATE OR REPLACE TRIGGER temp_aur AFTER INSERT OR UPDATE OF M, P ON TEMP FOR EACH ROW BEGIN dbms_output.put_line ('after insert or update of m, p'); END; ·WHEN(BOOLEAN EXPRESSION) 这是个可选语句,用来过滤触发触发器的条件。 CREATE OR REPLACE TRIGGER temp_air AFTER INSERT ON TEMP FOR EACH ROW WHEN (NEW.N = 0) BEGIN dbms_output.put_line('executing temp_air'); END; 上例中表示AFTER INSERT行触发器触发的条件是:N字段的值等于0. NEW.COLUMN_NAME : INSERT或UPDATE触发器中WHEN语句中引用字段的语法。 OLD.COLUMN_NAME : 用于UPDATE或DELETE行级触发器中WHEN语句中。在INSERT语句中为Null。 |
Oracle触发器介绍 行级触发器
最新推荐文章于 2024-03-30 14:33:26 发布