触发器

创建触发器:
    CREATE [OR REPLACE] TRIGGER <触发器名>
    BEFORE|AFTER
    INSERT|DELETE|UPDATE [OF <列名>] ON <表名>
    [FOR EACH ROW]
    
WHEN (<条件>)
    
<pl/sql块>

    
关键字"BEFORE"在操作完成前触发;"AFTER"则是在操作完成后触发;
    
关键字"FOR EACH ROW"指定触发器每行触发一次.
    
 关键字"OF <列名>" 不写表示对整个表的所有列.
    
WHEN (<条件>)表达式的值必须为"TRUE".

特殊变量:
    
:new --为一个引用最新的列值;
    
:old --为一个引用以前的列值;
这些变量只有在使用了关键字 "FOR EACH ROW"时才存在.且update语句两个都有,而insert只有:new ,delect 只有:old;

使用RAISE_APPLICATION_ERROR
    
语法:RAISE_APPLICATION_ERROR(错误号(-20000到-20999),消息[,{true|false}]);
    
抛出用户自定义错误.
    
如果参数为'TRUE',则错误放在先前的堆栈上.

INSTEAD OF 触发器
    
INSTEAD OF 触发器主要针对视图(VIEW)将触发的dml语句替换成为触发器中的执行语句,而不执行dml语句.


禁用某个触发器
    
ALTER TRIGGER <触发器名> DISABLE
重新启用触发器
    
ALTER TRIGGER <触发器名> ENABLE
禁用所有触发器
    
ALTER TRIGGER <触发器名> DISABLE ALL TRIGGERS
启用所有触发器
    
ALTER TRIGGER <触发器名> ENABLE ALL TRIGGERS
删除触发器
    
DROP TRIGGER <触发器名>