--数据对象:触发器trigger
--触发器:当数据库发生操作时,会发生一些事件
--从而自动地执行相应的程序
--分类
--语句触发器:在执行DML(INSERT,DELETE,UPDATE)操作时,将激活该触发器
--创建触发器,用于显示基于DEPT表的DML操作情况
create or replace trigger trg_dept
before insert or update or delete on dept
declare
v_now varchar2(30);
begin
v_now:=to_char(sysdate,'yyyy-mm-dd hh24:mi:ss');
case
when inserting then
dbms_output.put_line(v_now||'对dept进行了insert操作');
when updating then
dbms_output.put_line(v_now||'对dept进行了update操作');
when inserting then
dbms_output.put_line(v_now||'对dept进行了insert操作');
end case;
end;
-- BEFFORE行触发器
--基于DEPT表创建行触发器,针对不同的DML操作显示数据变化情况。
create or replace trigger trg_dept_before
before insert or update or delete on dept
for each row
declare
v_now varchar2(30);
begin
v_now:=to_char(sysdate,'yyyy-mm-dd hh24:mi:ss');
case
when inserting then
dbms_output.put_line(v_now||'对dept进行了insert操作');
dbms_output.put_line('添加数据:'||:new.deptno||:new.dname||'-'||:new.loc);
when updating then
dbms_output.put_line(v_now||'对dept表进行了update操作');
dbms_output.put_line('修改前数据:'||:old.deptno||'-'||:old.dname||'-'||:old.loc);
dbms_output.put_line('修改后数据:'||:new.deptno||'-'||:new.dname||'-'||:new.loc);
when deleting then
dbms_output.put_line(v_now||'对dept表进行了delete操作');
dbms_output.put_line('删除数据'||:old.deptno||'-'||:old.dname||'-'||:old.loc);
end case;
end;
--伪记录
--:old:new
--:old 当进行inser操作时,值无效(为NULL):new有效
--:old:new当进行updat操作时,值都有效
--:new当进行delete操作时,值无效(NULL):old 有效
--触发器的条件谓词inserting,updating,deleting
--inserting:如果触发语句是insert语句,则为true 否则为false;
--updating:如果触发语句是update语句,则为true 否则为false;
--deleting:如果触发语句是delete语句,则为true 否则为false;
备份地址: 【Oracle笔记(六)】