create or replace function GenID(fl varchar2)
return varchar2 is
result varchar2;
curNo varchar2 ;begin result:='';
  select currentNo into curNo  from basbillcfg where  firstLetter=fl;
 if( curno is null) then
    update Basbillcfg set CurrentNo=fl+to_char(sysdate,'yyyymmdd')+lpad('1',serlen,'0') where firstletter=fl;
 else
    if( substr(currentNo,2,8)=to_char(sysdate,'yyyymmdd') ) then
    
          select substr(currentNo,0,10) as s1 ,lpad(tochar(to_int( substr(crurentno,length(currentNo)-serlen,Serlen))+1),serlen,'0') as s2 ,s1||s2 into currentNo from BasBillCfg where firstLetter =fl  ;
          update BasBillcfg set CurrentNo =curNo where firstLetter =fl;
          result:=curNo;
          return;
       else
      
         select substr(currentNo,0,10) as s1,lpad('1',serlen,'0') as s2,s1||s2 into currentNo  from BasBillCfg where firstLetter =fl  ;          update BasBillcfg set CurrentNo =curNo where firstLetter =fl;
          result:=curNo;
          return;
        
    end if; return(result);end GenID;oracle函数

解决方案 »

  1.   

    result和curNo 声明的时候不指定长度的吗?
      

  2.   

    函数中禁用dml(增删改)操作,非要用,改成存储过程。其实是有办法用的,但是,会用的人也早就理解为什么不让这么用了。
      

  3.   

    不好意思啊,各位大侠,我oracle基本不懂,这是上头给的一个函数,让我调通了,项目中要用到。我用plsql调的时候,一直报错。不是我不想描述,是我不知道怎么描述啊!我开始以为只是函数格式错误,哎,愁死了...