在做Oracle reports,写的PL/SQL,将下面的语句做在cursor里cursor c_main_cursor(para varchar2) is 
select dept_id from deps where dept_id in decode(para,'',dept_id, para);由于dept_id是整型,输入参数如果是1,2,3,4会被当作字符串型而得到invalid number的错误。有没有什么办法解决?谢谢

解决方案 »

  1.   

    1 动态游标2 拆分 where in (select regexp_substr('1,2,3,4','\d+',1,level) from dual connect by level <= 4)
      

  2.   


    如果要返回好多行数据的,但又不确定可能返回多少行当,connect by level <=4怎么改?
    谢谢
      

  3.   

    改成动态SQL的游标吧,decode在动态SQL之外计算,就不会存在这样的问题了
      

  4.   

    应该不会出现这样的错误
    即便参数数据类型为varchar2,只要是数字字符,oracle会隐式转化为数字型的
      

  5.   


    level <= (select length(原字符串)-length(replace(原字符串,'分隔符比如,'))+1  from dual )