触发器总结

触发器在数据库里以独立的对象存储,它与存储过程和函数不同的是,存储过程与函数需要用户显示调用才执行,而触发器是由一个事件来启动运行。即触发器是当某个事件发生时自动地隐式运行。并且,触发器不能接收参数。所以运行触发器就叫触发或点火(firing)。ORACLE事件指的是对数据库的表进行的INSERT、UPDATE及DELETE操作或对视图进行类似的操作。ORACLE将触发器的功能扩展到了触发ORACLE,如数据库的启动与关闭等。所以触发器常用来完成由数据库的完整性约束难以完成的复杂业务规则的约束,或用来监视对数据库的各种操作,实现审计的功能。

CREATE [OR REPLACE] TRIGGER trigger_name
{BEFORE 
| AFTER }
{
INSERT | DELETE | UPDATE [OF column [, column …]]}
[OR {INSERT | DELETE | UPDATE [OF column [, column …]]}...]
ON [schema.]table_name | [schema.]view_name 
[REFERENCING {OLD [AS] old | NEW [AS] new| PARENT as parent}]
[FOR EACH ROW ]
[WHEN condition]
PL
/SQL_BLOCK | CALL procedure_name;

 

CREATE OR REPLACE TRIGGER TG_TABLE_IUD
AFTER INSERT OR UPDATE OR DELETE
ON TB_DIR_DAICHO_TR
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
DECLARE
-- 定数定義
    CV_DUMMY      CONSTANT VARCHAR2(1) := '0';
    CN_DUMMY      CONSTANT NUMBER      := 0;
    CD_DUMMY      CONSTANT DATE        := SYSDATE;
-- 変数定義
    d_update_dt            DATE;         -- 更新日時
    v_update_id            VARCHAR2(10); -- 更新者ID
--
    rec_tddt      TABLE%ROWTYPE;
--
BEGIN
--
    -- key値保存
    IF DELETING THEN
        d_update_dt        := :OLD.UPDATE_DT;        -- 更新日時
        v_update_id        := :OLD.UPDATE_ID;        -- 更新者ID
    ELSE
        d_update_dt        := :NEW.UPDATE_DT;        -- 更新日時
        v_update_id        := :NEW.UPDATE_ID;        -- 更新者ID
    END IF;
--
    -- DELETE trigger
    IF DELETING THEN
   
    ELSIF INSERTING THEN
   
    ELSE
   
    END IF;
EXCEPTION
  WHEN OTHERS THEN
    Raise_application_error(-20001, sqlcode || ':' || sqlerrm);
    dbms_output.put_line('エラー' || sqlcode || ':' || sqlerrm);
--
END;
/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值