oracle 触发器冒号,触发器if else写法 oracle触发器

故事是这样的,这边有个项目是我们的项目经理写的项目,但是有些功能还是需要外包去做,然后外包做好了,却对项目经理的数据库不了解,然后就想了下,让我去做触发器来适配他们,让外包插入数据到他们的表的时候触发事件到我项目经理的表里去,这里的触发是如果项目经理的表有数据,就修改数据,如果没有就插入数据,效果类似merge,也不晓得究竟能用不.唉不管了,简单的写了一下 。

关键还是if else的写法,开始的时候写,老报错,苦恼了一段时间,我就纳闷,我写个触发器连if else都不会,以后还搞什么,然后各种百度,无奈还是没解决,就拼运气上群里问问,结果还真解决了…

oracle 的if else 嵌套语法

先建一个变量,注意,是在declare 和 begin 之间写

declare

result number;

begin

if 1>2 then

result = 2;

else

result = 2;

end if;

end;

----------------结果编译出错了…请看下面,编译是正确的!!-------------------------------------------------------------

declare

result number;

begin

if 1>2 then

result := 2;

else

result := 2;

end if;

end;

–发现了什么?对,在等号前加了个冒号,就行了。解释是 直接等于是比较关系 :=才是赋值…

在 if 判断语句 then 的后面加一个 begin 关键字 ,语句中就可以写多行语句了!但是要在语句后面加一个end;

例:

declare

result number;

begin

if 1>2 then begin

select ....

insert ...

update...

end;

else begin

delete....

insert...

select...

end;

end if;

end;

//下面是项目实战的触发器

declare

HISID varchar(64);

DRUGID number(6);

DRUGNAME VARCHAR(32);

dataCount number;

dataCount2 number;

tankNo number;--柜号

tankNoString varchar2(255);

begin

tankNo:= ((to_number(:new.mccode)-1)*195+(:new.mccol-1)*13+:new.mcrow);

SELECT r.DRUGID2 into HISID FROM DRUGNAME r where r.DRUGNAME = :new.GRANULENAME ;

SELECT r.DRUGID into DRUGID FROM DRUGNAME r where r.DRUGNAME = :new.GRANULENAME ;

-- SELECT count(*) into dataCount from Drawer r where r.WCLASS =:new.MCCODE AND r.WROW =:new.MCROW AND r.WCOL = :new.MCCOL;

SELECT count(*) into dataCount from Drawer r where r.WCLASS =:new.MCCODE AND r.DRAWERID= tankNo;

if dataCount>0 then begin

update drawer dr set

dr.drugid = DRUGID,

dr.DRID=:new.granulecode,

dr.drugid2=HISID

where dr.DRAWERID = tankNo AND dr.WROW =:new.MCROW and dr.WCOL = :new.MCCOL ;

end;

else begin --

if tankNo <10 then begin

tankNoString:='S00'||tankNo;

INSERT INTO DRAWER(DRAWERID,WCLASS,WCOL,WROW,DRUGID,DRID,DRUGID2)

VALUES(tankNo,:new.mccode,:new.mccol,:new.mcrow,DRUGID,tankNoString,HISID);

end;

end if;

if (tankNo <100 and tankNo >10 ) then begin

tankNoString:='S0'||tankNo;

INSERT INTO DRAWER(DRAWERID,WCLASS,WCOL,WROW,DRUGID,DRID,DRUGID2)

VALUES(tankNo,:new.mccode,:new.mccol,:new.mcrow,DRUGID,tankNoString,HISID);

end;

end if;

if (tankNo <1000 and tankNo >100 ) then begin

tankNoString:='S'||tankNo;

INSERT INTO DRAWER(DRAWERID,WCLASS,WCOL,WROW,DRUGID,DRID,DRUGID2)

VALUES(tankNo,:new.mccode,:new.mccol,:new.mcrow,DRUGID,tankNoString,HISID);

end;

end if;

end;

end if;

end;

如果你认真看了,你就会发现,下面我有3个if判断语句都没有用 else if,不是我不用,是用了会报错,如果哪位兄弟知道了怎么使用,请给我留言.谢谢

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值