存储过程有一个参数,如果传入的值是:
1,2,3
那么在sql中的in后面使用时,系统会自动加上引号,变成:
'1,2,3'
不知大虾是否有比较简便的方法可以搞定这是问题?
谢先!

解决方案 »

  1.   

    不会有这种问题
    你是在组合动态sql语句的过程中吗?
    你必须使用动态sql才能达到你的效果
      

  2.   

    存储过程中的sql是静态的,只是有几个参数是从外面传给存储过程的,放在sql中的in的括号里面。
    比如传进来的就是:
    1,2,3
    除了用动态sql,是否有别的方法?
    谢先!
      

  3.   

    没有什么别的好办法了
    动态sql很简单的
    v_count number;
    begin
    ...
    str:='select count(1) from tbname where col in('||v_in||')';
    execute immediate str into v_count;
    ...
      

  4.   

    你的参数类型是什么的,我用char试了一下,没问题的
    CREATE OR REPLACE procedure p1(ccc IN char,bbb in char)
    ...
    dbms_output.put_line(ccc);
    dbms_output.put_line(bbb);
    .....
    .....sqlplus :
    execute p1(1,2)
    1
    2过程成功执行
      

  5.   

    写错了
    execute p1(1,2)
      

  6.   

    他是要传一个参数里面,包括逗号。
    因为参数是一逗号分隔的,所有ORACLE会加上单引号,加以区分
      

  7.   

    其实你完全可以到里面在分割,要实现也可以,  
      CREATE OR REPLACE procedure p1(ccc IN char) is
        begin
        dbms_output.put_line(ccc);
       end;
    PL/SQL procedure successfully completed.
    SQL> execute p1('1'||chr(44)||'2'||chr(44)||'3');
    1,2,3PL/SQL procedure successfully completed.