oracle触发器举例
oracle触发器举例
1.说明
触发器是一种特殊的存储过程,触发器一般由事件触发并且不能接受参数,存储器由语句块去调用
语法 :
CREATE [OR REPLACE] TRIGGER trigger_name
INSTEAD OF
{INSERT|DELETE|UPDATE [OF COLUMN...]}
[OR {INSERT| DELETE| UPDATE [OF COLUMN...]}]
ON VIEW_NAME
[REFFERENCING{OLD [AS] OLD | NEW [AS] NEW| PARENT AS PARENT}] // 可以指定相关名称,当前的默认相关名称为OLD和NEW,
应用相关名称时需要加:
[FOR EACH ROW] //instead of 触发器只能在行级上触发,因为没有必要指定
[WHEN CONDITION]
DECLARE
BEGIN
END;
1.说明
触发器是一种特殊的存储过程,触发器一般由事件触发并且不能接受参数,存储器由语句块去调用
语法 :
CREATE [OR REPLACE] TRIGGER trigger_name
INSTEAD OF
{INSERT|DELETE|UPDATE [OF COLUMN...]}
[OR {INSERT| DELETE| UPDATE [OF COLUMN...]}]
ON VIEW_NAME
[REFFERENCING{OLD [AS] OLD | NEW [AS] NEW| PARENT AS PARENT}] // 可以指定相关名称,当前的默认相关名称为OLD和NEW,
应用相关名称时需要加:
[FOR EACH ROW] //instead of 触发器只能在行级上触发,因为没有必要指定
[WHEN CONDITION]
DECLARE
BEGIN
END;
举例: 删除表Test1220 数据 通过触发器 插入到Test1220_bak 表
create table Test1220
(
deptno varchar(10),
total_employeer varchar(10),
total_salary varchar(10)
);
create table Test1220
(
deptno varchar(10),
total_employeer varchar(10),
total_salary varchar(10)
);
create table Test1220_bak
(
deptno varchar(10),
total_employeer varchar(10),
total_salary varchar(10)
);
(
deptno varchar(10),
total_employeer varchar(10),
total_salary varchar(10)
);
insert into Test1220 values('1','2','122');
insert into Test1220 values('10','2','122');
insert into Test1220 values('10','2','122');
CREATE OR REPLACE TRIGGER Test1220_delete
AFTER delete ON Test1220
FOR EACH ROW
begin
insert into Test1220_bak values(:old.deptno,:old.total_employeer,:old.total_salary);
end Test1220_delete;
delete Test1220 where deptno ='10'
AFTER delete ON Test1220
FOR EACH ROW
begin
insert into Test1220_bak values(:old.deptno,:old.total_employeer,:old.total_salary);
end Test1220_delete;
delete Test1220 where deptno ='10'
原文链接:http://www.jxszl.com/biancheng/shujuku/445483.html