create or replace function SETCASENO(strDate in VARCHAR2,strName in varchar2) return VARCHAR2 is Result VARCHAR2(50);
begin
   if(INSTR(strName,'批次',0,1))>0 then
   Result:='#YDSP'||strDate;
   else
    Result:='#DDXZ'||strDate;
   end if;
    return(Result);
end SETCASENO;

解决方案 »

  1.   

    你的INSTR函数的调用存在问题instr(strName,'批次',0,1)这个中间写0那么这个语句的结果永远是0,
    第一个条件就永远不可能为真值.
    你报错的地方可能是你的 Result 的大小不够 ,你改成Result VARCHAR2(500)试验下
      

  2.   

    DECLARE
    strname VARCHAR2(20);
    strDate VARCHAR2(20);
    Result VARCHAR2(50);BEGIN
    strname :='aaaaaaa批次批次';
    strDate:='2006-11-22';
    IF(INSTR(strName,'批次',1,1))>0 THEN
       Result:='#YDSP'||strDate;
       ELSE
        Result:='#DDXZ'||strDate;
       END IF;
    DBMS_OUTPUT.PUT_LINE(Result);END;--
    #YDSP2006-11-22
      

  3.   

    IF(INSTR(strName,'批次',1,1))>0 THEN--注意INSTR(strName,'批次',1,1))>