oracle触发器实例

create or replace trigger "TRI_SCONF"

before update or delete or insert

  on km_handler_orgsconfig

 for each row

 

Declare t KM_HANDLER_SCONFIG_HIS.update_type%type;

这样的如以前已经建好一个表KM_HANDLER_SCONFIG_HIS,里面有一个字段update_type是varchar(10)

 

那么现在存储过程有这么一句

Declare user_name KM_HANDLER_SCONFIG_HIS.update_type%type;

 

意思就是user_name保持和update_type一样的type属性是varchar(10)

 

(1)       DB2中不支持”or replace”的语法;且参数名与IN/OUT的位置也需互换,声明变量时须使用declare关键字,为变量赋值时须使用set关键字。

 

(2)       而对于oracle中的%TYPE的功能,DB2中好像还没有很好的实现方式。

 

(3)       同样,oracle中清空表的命令truncate,DB2也不能原样引用,但它也提供了2种实现方式,一是将一空文件的内容导入表中import null.dat ;二是设置表的特性为不记录日志alter table tablename .但是第二种方式会在某些情况下导致原表无法使用,具体的还没弄清楚呢。

 

(4)       至于sql语句表现不同应该就是oracle与db2各自的语法了。比如说oracle的rownum,db2可以使用fetch first n only,或row_number() over()等。

 

当然,调用存储过程的方法是一样的,call proname(2,?),输出参数用?来代替。

 

对于上面的第2点要想个好的解决方法,这种功能在存储过程中用的还是蛮多的。

begin

 if inserting then

 t:='i';

 insert into KM_HANDLER_SCONFIG_HIS values(:new.orgid,:new.CID,sysdate,:old.SID,:old.SCORE,:new.sid,:new.score,t);

 elsif updating then

 t:='u';

 insert into KM_HANDLER_SCONFIG_HIS values(:old.orgid,:old.CID,sysdate,:old.SID,:old.SCORE,:new.sid,:new.score,t);

 else

  t:='d';

  insert into KM_HANDLER_SCONFIG_HIS values(:old.orgid,:old.CID,sysdate,:old.SID,:old.SCORE,:new.sid,:new.score,t);

  end if;

end;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邢庆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值