举个简单例子说明
create or replace procedure procStr(inString in varchar2)
as
begin
select * from book where id in (inString);
end procStr;我在inString中输入‘21,22’,21,22,‘‘21’,‘22’’
都不行,请教各位大侠如何通过参数,给存储过程的in语句进行赋值其中inString中id的个数是不定的,多少都有可能

解决方案 »

  1.   

    create or replace procedure procStr(inString in varchar2)
    as
    begin
    execute immediate 'select * from book where id in ('||inString||')';
    end procStr;
      

  2.   

    -- 给个例子给你:
    CREATE OR REPLACE PACKAGE pkg_emp
    AS 
      TYPE myrctype IS REF CURSOR;
      PROCEDURE Get_empinfo(v_empno IN VARCHAR2, p_rc OUT myrctype);
    END pkg_emp;
    /CREATE OR REPLACE PACKAGE BODY pkg_emp
    AS
      PROCEDURE Get_empinfo(v_empno IN VARCHAR2, p_rc OUT myrctype)
      IS
        sqlstr VARCHAR2(4000);
      BEGIN
        sqlstr := 'SELECT * FROM emp WHERE empno IN ('||v_empno||')';
        OPEN p_rc FOR sqlstr;
      END Get_empinfo;
    END pkg_emp;
    /SQL> var v_rc refcursor;
    SQL> exec pkg_emp.Get_empinfo('7902,7788',:v_rc);
    SQL> print v_rc;
      

  3.   

    楼上两位思路都不错,呵呵。楼主的inString两端的引号没有带进去,所以出错。
      

  4.   

    都怪我,我举得例子不恰当,我忘了一个条件了,其实我的存储过程是create or replace procedure procStr(inString in varchar2)
    as
    cursor resultcur is select * from book where id in (inString);
    begin
    ...这里对cursor进行遍历
    end procStr;
    还请大家帮帮忙
      

  5.   

    create or replace procedure procStr(inString in varchar2)
    as
    sys_refcursor resultcur ;
    begin
     open resultcur for 'select * from book where id in (' || inString || ')’;
    end procStr;
      

  6.   


    在fetch resultcur 的时候编译不过去
      

  7.   

     --后面有个中文的'号create or replace procedure procStr(inString in varchar2)
    as
    sys_refcursor resultcur ;
    begin
    open resultcur for 'select * from book where id in (' || inString || ')';
    end procStr;
      

  8.   

    sys_refcursor resultcur 
    声明的时候报错,这种方法不对吧?
    Error: PLS-00201: identifier 'RESULTCUR' must be declared
    Line: 19
    Text: sys_refcursor resultcur;使用type resultcur is ref cursor;进行声明的时候
    Error: PLS-00330: invalid use of type name or subtype name
    Line: 146
    Text: open resultcur for sqlstr;sqlstr := 'select * from book where id in (' || inString || ')';
    open resultcur for sqlstr; 这句编译的时候报上边的错误
      

  9.   

    resultcur  sys_refcursor ;