oracle中的if···then-elsif···then-end if

1:不管过程有没有编译成功,但是这个过程总是会生成的,你可以看到他们打小红叉了(如果有错,编译不成功);pl/sql 程序块其实是匿名的,而过程是有命名的,这样它可以存在数据库里面!因而他们的语法是一样,Pl/sql的意思是可编程的SQL,是对SQL的扩展!

正确代码

create or replace procedure test_p is
begin
  if 1=2 then
  null;
else if 2 = 3 then
  null;
  end if;
end if;

end test_p;

 

 

 

create or replace procedure test_p is
begin
  if 1=2 then
  null;
elsif 2 = 3 then
  null;
 
end if;

end test_p;

 

恶心的Oracle的if else if...

(2009-04-29 20:44:26)
前段时间写Oracle存储过程就遇到问题.
原来写成这样
if 1=2 then
  null;
elseif 1=3 then
  null
end if;
在PL/SQL编辑环境下elseif没有变色,说明不是关键字。
后来改成
if 1=2 then
  null;
else if 1=3 then
  null
end if;
编译时报异常。
去goole上百度了下,很多人都说是 elseif。
又试了N边,编译总不能通过。
怒了,直接写成
if 1=2 then
  null;
else if 1=3 then
      null
  end if;
end if;
问题就解决了。

今天又要在存储过程中用if...else if ...else if...写数据转换的东东,还按原来那样写看着很恶心。
后来发现是写成if...elsif...elsif....end if;
神啊,终于被我找到答案了。

返回来看看,原来不是elseif,而是elsif,少了个"e"。他大爷的,干嘛要少个e啊,万恶的Oracle,真恶心。

不管怎么着,问题总算解决了,把这恶心记在心里,以后不犯同样错误。 贴出我的终极sql
 PROCEDURE SP_UPD_YSJGXYJCSP(IS_JGXYBABH IN VARCHAR2,
                             IS_YHBH     IN VARCHAR2,
                             IS_YHMC     IN VARCHAR2,
                             IS_SPYJ     IN VARCHAR2,
                             IS_SPZT     IN VARCHAR2,
                             IS_YWLX     IN VARCHAR2,
                             IS_JGMC     IN VARCHAR2,
                             IS_YWBH     IN VARCHAR2,
                             IS_JCLX     IN VARCHAR2,
                             OS_MSG      OUT VARCHAR2,
                             OS_RETURN   OUT INTEGER,
                             OS_ERRORINF OUT VARCHAR2) AS
   V_COUNT INTEGER;
   V_COUNT2 INTEGER;
   V_SQZT  VARCHAR(10);
 
 BEGIN
   OS_RETURN   := 0;
   OS_ERRORINF := '';
 
   SELECT COUNT(1)
     INTO V_COUNT
     FROM ZJJG_JGXYBAXX A
    WHERE A.JGXYBABH = IS_JGXYBABH
      AND A.JGXYZT = '06';
 
   IF V_COUNT = 0 THEN
     OS_MSG := '该监管协议状态已经发生变化!';
     RETURN;
   END IF;
   if IS_YWLX = 'JC02' then 
   CASE IS_SPZT
     WHEN '1' THEN
       V_SQZT := '03';
     WHEN '0' THEN
       V_SQZT := '05';
   END CASE;
   elsif IS_YWLX = 'JC05' then 
        CASE IS_SPZT
     WHEN '1' THEN
       V_SQZT := '09';
     WHEN '0' THEN
       V_SQZT := '08';
   END CASE;
   elsif IS_YWLX = 'JC06' then 
        CASE IS_SPZT
     WHEN '1' THEN
       V_SQZT := '02';
     WHEN '0' THEN
       V_SQZT := '10';
   END CASE;
   end if;
   IF IS_SPZT = '1'and IS_YWLX = 'JC02' THEN
     if (PKG_ZJJG_YSZJGL.fuc_isyhxz(IS_JGXYBABH,'00008')>0) then 
      OS_MSG := '该监管协议银行受限,不能审批通过!';
      return;
      else
     IF IS_JCLX = '02' AND IS_JCLX = '03' AND IS_JCLX = '04' THEN
       --验证该协议是否存在网签合同   
       SELECT COUNT(1)
         INTO V_COUNT2
         FROM ZJJG_JGXYJCSQ A, YW_SPFMMHTZYXX B
        WHERE A.JGXYBABH = B.JGXYBABH
          AND B.HTZTDM IN ('01', '02', '03', '04', '07', '08', '09', '10')
          AND A.JGXYBABH = IS_JGXYBABH
          AND A.SQBH = IS_YWBH;
     END IF;
   
     IF V_COUNT2 > 0 THEN
       V_SQZT := '04'; --提交市局审批
     /*ELSE
       --更新监管协议状态为注销
       UPDATE ZJJG_JGXYBAXX A
          SET A.JGXYZT = DECODE(IS_SPZT, '1', '07', A.JGXYZT),
              A.XGSJ   = TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS')
        WHERE A.JGXYBABH = IS_JGXYBABH;*/
     END IF;
	   end if;
   ELSif  IS_SPZT = '0'and IS_YWLX = 'JC02' then
     UPDATE ZJJG_JGXYBAXX A
      SET A.JGXYZT =  '04',A.BLZT = '00'
    WHERE A.JGXYBABH = IS_JGXYBABH;
   END IF;
 
   UPDATE ZJJG_JGXYJCSQ A
      SET A.SQZT = V_SQZT
    WHERE A.SQBH = IS_YWBH;
   --添加审批意见
   SP_INS_JGXYBLLC(IS_YWBH,IS_JGXYBABH,IS_YWLX,IS_YHBH,IS_YHMC,IS_SPYJ,IS_SPZT,IS_JGMC,OS_RETURN,OS_ERRORINF);
   OS_MSG := '00';
   COMMIT;
 EXCEPTION
   WHEN OTHERS THEN
     ROLLBACK;
     OS_RETURN   := -1;
     OS_ERRORINF := '原因:' || SQLERRM;
 END SP_UPD_YSJGXYJCSP;


上网一搜,一群人还在犯错中……

抄别人逻辑,写自己代码,让他们郁闷去吧!O(∩_∩)O哈哈~
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值