触发器

Posted wangchao422

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了触发器相关的知识,希望对你有一定的参考价值。

1: 触发器的原理:在执行增删改某表之前或之后,自动执行sql语句!

2:触发触发器时,内存中自动临时生成2个表:表名为:old:new:该表的列和操作的表完全一样!

修改stu表  sid  sname   sage

:old   修改之前的数据;修改之前的数据

:new  更改之后的值;修改之后的数据

删除stu表  sid  sname   sage

:old   修改之前的数据;删除之前的数据

:new  更改之后的值;删除之后的数据   空

添加stu表  sid  sname   sage

:old   修改之前的数据;空

:new  更改之后的值;添加之后的数据   

 

 

create or replace trigger t1 after update on ka for each row

declare a varchar(50);b number;

begin

  

  if(:new.kmoney>:old.kmoney)

    then

       a := ‘存钱‘;

       b := :new.kmoney-:old.kmoney;

  else

       a := ‘取钱‘;

       b := :old.kmoney-:new.kmoney;

   end if;

   

  insert into  liushui values(l_seq.nextval,:old.knum,a,b);

end;

 

 

 

 

触发器:

前置触发,后置触发,语句触发!

 

前置触发:

create or replace trigger t1 before update on emp

begin

     sql

end;

 

 

 

Create or replace trigger t1

Before update on stu

Begin

If(to_char(sysdate,’hh24’)<9  or  to_char(sysdate,’hh24’)>18 ) then

Raise_application_error(-20001,’老子现在不上班!不能操作stu表!’);

End if;

End;

 

后置触发:

Create or replace trigger t1

After  update on stu

Begin

dbms_output.put_line(“我知道你修改了stu表!”);

End;

 

语句触发:

:old   没有修改之前的数据;

:new  更改之后的值;

 

create or replace trigger t1 before update on emp for each row

begin

      if(:old.e_price>:new.e_price) then

           raise_application_error(-20001,‘xxxxxxxxxxxx‘);

      end if;

end;

以上是关于触发器的主要内容,如果未能解决你的问题,请参考以下文章

触发器的应用和用法?

触发器

oracle 触发器

oracle触发器

postgreSQL触发器

oracle中触发器有啥作用