在ORACLE里写了一个自定义函数,功能为取得序列号:
需要传两个参数.
sfgetslipno   (p_dept in ....
          p_kind in ......
)return char
IS
begin
    p_kind := upper(p_kind);
    
      select slipno_nowno
      into v_sno
      from slipno
     where slip_typ_id  = '02'
       and slipno_seqid = p_kind
       and dept_id      = p_dept;    return trim(p_dept)||v_sno
...
其中p_dept为部门编码,p_kind为编码类型.在存储过程里调用这个函数的时候:
v_no := sfgetslipno(参数)出现错误,但是我测试sfgetslipno函数的时候,是可以得到值,只要在存储过程里调用就得不到值,而且出现错误.调试存储过程的时候,当sfgetslipno执行完成返回存储过程的时候,直接出现OTHER错误.
请大家帮帮忙,谢谢大家.

解决方案 »

  1.   

    在函数SELECT文之前还有一段SQL代码:
           更新  slipno 表,把slipno_nowno 加上1.   
    发的时候总是提示我不能使用伤害论坛的言论,没办法,只好这样弄.不好意思.
      

  2.   

    select slipno_nowno
          into v_sno
          from slipno
         where slip_typ_id  = '02'
           and slipno_seqid = p_kind
           and dept_id      = p_dept;
    如果你查不到值就会出错啊.直接就异常了.所以函数报不报错与你给的参数有很大的关系,你最好还是做一下处理,比如在NO_DATA_FOUND 里面给这个值赋为空,或者什么的.
      

  3.   

    老兄,你测试过嘛?p_kind := upper(p_kind);可以赋值嘛?
    p_kind是函数的参数,这样赋值会出错的