版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Ghost_chou/article/details/47333479
触发器和条件谓词,笔记为:
------------触发器
/*
create or replace trigger 名称
after/before insert/update/delete on emp
begin
end;
开启触发器
insert/update/delete操作
*/
set serveroutput on;
create or replace trigger trigger_add
after insert on emp
begin
dbms_output.put_line('boom shakalaka!!');
end;
/
insert emp value(1001);
create or replace trigger trigger_t1
before delete on emp
begin
if to_char(sysdate,'day') in ('星期四','星期日') then
raise_application_error(-20001,'今天是周末,数据库要休息!!');
end if;
end;
--------------条件谓词:可以同时执行dml所有操作
----监控emp表的操作(编号、操作人,操作时间、操作动作)
create table emp_log
(
log_id number(8) primary key,
username varchar2(20),
op_date date,
op_content varchar2(20)
);
create sequence seq_id;
create or replace trigger trigger_log
after insert or delete or update on emp
declare
v_content varchar2(20);
begin
case
when inserting then v_content :='增加';
when deleting then v_content :='删除';
when updating then v_content :='更新';
end case;
insert into emp_log values(seq_id.nextval,user,sysdate,v_content);
end;
/
----------------old、new
-------------删除表中的数据,然后通过触发器提供的伪表方式来进行备份操作 (t1表做为示例)
-------update操作old、new表 :new、:old (同步备份)
-------delete操作old表 :old (要备份)
-------insert操作new表 :new (不用备份)
create table t1(tid number(8),tname varchar2(20));
---1、创建一张伪表
create table copyt1 as select * from t1 where 1<>1;
--2、创建数据备份的触发器
create or replace trigger trigger_copyt1
after delete on t1
for each row
begin
--当t1表中的数据被删除,则往copyt1表中插入被删除的数据
insert into copyt1 values (:old.tid,:old.tname);
end;
/
-----------------------------修改数据,备份表数据同步更新
create or replace trigger trigger_copyt2
after update on t1
for each row
begin
--当源表直接更新,则备份表数据同步更新
update copyt1 set tname = :new.tname where tid = :old.tid;
end;
/