oracle 触发器锁表,触发器锁表 - Oracle开发 - ITPUB论坛-中国专业的IT技术社区

create or replace trigger imei_info_oper

after insert on bass_user_imei_info

for each row

declare

i_imei varchar2(15);

i_brand varchar2(32);

i_model varchar2(32);

i_is_mms varchar2(1);

is_exist number;

err_code number;

begin

i_is_mms :='Y';

begin

begin

select substr(imei,1,8) into i_imei from ob_imei_info where user_nbr=:new.msisdn;

is_exist := 1;

exception

when no_data_found then

is_exist := 0;

i_imei := '';

end;

if (is_exist = 1) and (i_imei=substr(:new.imei,1,8)) then  --the old user is exist and phone model is same

null;

else  --the old user is no exist or user phone model is changed

begin

select c.brand_name,b.model_name,decode(b.is_mms,0,'N','Y') into i_brand,i_model,i_is_mms

from ob_mobile_imei_info a,ob_mobile_terminal_cfg b,ob_mobile_brand_cfg c

where a.imei_no=substr(:new.imei,1,8)

and a.terminal_id=b.terminal_id and b.brand_id=c.brand_id;

exception

when no_data_found then

begin

i_brand := 'NO DEFINE';

i_model := 'NO DEFINE';

i_is_mms := 'Y';

end;

end;

if is_exist = 1 then

update ob_imei_info set phone_brand = i_brand,

phone_model=i_model,

support_mms=i_is_mms,

update_time=sysdate,

imei=:new.imei

where user_nbr=:new.msisdn;

else

insert into ob_imei_info(user_nbr,

phone_brand,

phone_model,

support_mms,

update_time,

imei)

values(:new.msisdn,

i_brand,

i_model,

i_is_mms,

sysdate,

:new.imei);

end if;

end if;

end;

exception

when others then

err_code := sqlcode;

insert into fan_tmp values(:new.msisdn,:new.imei,err_code);

end imei_info_oper;

就几个表之间关联,然后统一更新到一个表去。上面说的同一个值不存在,因为我测试了只插入一个值,也会锁表,等待执行时间达到60秒。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值