概述
触发器在数据库里以独立的对象存储,它与存储过程和函数不同的是,存储过程与函数需要用户显示调用才执行,而触发器是由一个事件来启动运行。即触发器是当某个事件发生时自动地隐式运行。并且,触发器不能接收参数。所以运行触发器就叫触发或点火(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;
/
最后
以上就是高挑小海豚为你收集整理的触发器总结的全部内容,希望文章能够帮你解决触发器总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复