oracle 这个if...else...end if 错在哪里了?

beijibingdong 发布于 2016/08/16 09:07
阅读 1K+
收藏 0

【领华为电脑包】容器化时代到来!跳转机分配问题终于“有救”了!>>>

我创建了一个oracle函数,就是进行两层判断,返回相应字符串,但是在第一个sql语句查询结果为空的时候,最外一层的else好像不执行,return返回的也是个空。

下面是代码

create or replace function fun_ck_datareassh_1(pid_v in varchar2,typeid_v  in varchar2) return varchar2 as
        v_return_char  VARCHAR2(60);--返回字符串
        v_type         varchar2(60);  -- 查询类型
        v_type_0       varchar2(60);   -- 业务状态
        v_process      varchar2(10); --是否流程中(1-在流程中;0-不在流程中)
        v_syq          varchar2(60);--是否试用期(不为空-试用期else)
begin
  v_return_char:='未正确解析说明';
  if typeid_v='201112050610' then
    SELECT bdstatus INTO v_process FROM Tbl_Info_Baseinfor_Temp WHERE TYPE_ID = typeid_v AND pid=pid_v;
      if v_process ='3' or v_process='1' or v_process='2' then 
             SELECT count(pid) INTO v_syq FROM tbl_rs_wageinfo t WHERE t.salaryjobclass LIKE 'syq%' AND t.pid=pid_v;
             if v_syq >0 then 
               v_return_char:='正常';
             else v_return_char:='非试用期,不能转正';
             end if;
      else v_return_char:='不在流程内';
      end if;
  else v_return_char:='未正确解析说明';
  end if;
  
  return v_return_char;
        
end fun_ck_datareassh_1;

下面是执行语句

 

SELECT fun_ck_datareassh_1('20150916150447','201112050610') FROM dual;  
SELECT fun_ck_datareassh_1('20120817553720','201112050610') FROM dual;

 

加载中
0
好习仁
好习仁

第一个语句结果为空的话就已经异常了,但是函数会对异常做处理直接就返回空,

selet into之前先count判断一下满足条件再做业务操作

beijibingdong
beijibingdong
谢谢大神,我不知道查询无结果还会抛出异常,自动返回空字符串。困扰我两天了快,非常感谢!
返回顶部
顶部