--数据对象:触发器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笔记(六)