oracle之触发器

1 oracle中触发器是当进行操作时触发事情,进行处理。例如进行对数据表进行插入、更新和删除时进行触发事情处理。
定义触发器的是:create or replace trigger xxx 
before|after   insert |update|delete 
on 数据库表名
for each row --这是表示对每一行操作都会触发事件
begin 
sql语句;
end;
如: create or replace trigger test4_t
 after delete 
 on demo 
 for each row
 begin
 dbms_output.put_line(':old.name'||:old.name);
 end;


2 oracle中用于输出语句。通过dbms_output.put_line(xxxxx)
如:dbms_output.put_line(':old.name'||:old.name); 
尽量的要使用||。括号里的需要时字符。而||是连接使用的。连接后就成字符了。


3 oracle中的触发器可以写if语句来进行判断。
格式为:  
 if 条件  then  
sql语句;
 end if;
如:create or replace trigger test4_t
after insert or update or delete 
on demo 
for each row
begin
 if inserting then
  dbms_output.put_line('进行的是插入操作');
 end if;
 if updating then
  dbms_output.put_line('进行的是更新操作');
 end if;
 if deleting then
  dbms_output.put_line('进行的是删除操作');
 end if;
end;


4 在oracle中的触发器中,可以判断是否是insert还是update还是delete 
如:create or replace trigger test4_t
after insert or update or delete 
on demo 
for each row
begin
 if inserting then
  dbms_output.put_line('进行的是插入操作');
 end if;
 if updating then
  dbms_output.put_line('进行的是更新操作');
 end if;
 if deleting then
  dbms_output.put_line('进行的是删除操作');
 end if;
end;


5 在oracle中的触发器中,可以使用‘:new’和‘:old’,:new表示是即将进行(插入或更新)操作的sql语句中的字段。
而:old表示进行(更新或删除)操作时的sql语句中的字段
如: create or replace trigger test4_t
 after delete 
 on demo 
 for each row
 begin
 dbms_output.put_line(':old.name'||:old.name);
 end;


6 oracle中对字段进行赋值时,使用":="。
如: v_type:='insert';


7 oracle中的触发器中不能对自己表进行插入更新删除操作。但可以对别的表进行这些操作。
如:create or replace trigger test4_t
after insert or update or delete 
on demo
for each row 
declare v_type varchar2(10);
begin
 if inserting then
    v_type:='insert';
 end if;
 if updating then
   v_type:='update';
 end if;
 if deleting then
   v_type:='delete';
 end if;
 insert into log values(user,v_type,sysdate);
 end;
但如果要对自己表进行插入更新删除操作则会报错。导致不能运行结束。
如:以下的触发器会报错,要多注意!!!!
如:create or replace trigger test4_t
after  delete 
on demo
for each row 
begin
 insert into demo values(:old.nm,:old.name,:old.password);
 end;





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值