不行的啊,我直接用,然后在外部给的参数是"A,B,C",但是它吧A,B,C看成一个参数了呀

解决方案 »

  1.   

    利用对象类型通过字符串分析出数据函数:
    create or replace type mytabletype as table of number;
    /create or replace function strtab(p_str in varchar2)
    return mytabletype
    as
    lstr varchar2(1000) default p_str||',';
    ln   number;
    ldata   mytabletype:=mytabletype();
    begin
    loop
     ln:=instr(lstr,',');
     exit when (nvl(ln,0)=0);
     ldata.extend;
     ldata(ldata.count):=ltrim(rtrim(substr(lstr,1,ln-1)));
     lstr:=substr(lstr,ln+1);
    end loop;
    return ldata;
    end;
    /测试:
    SQL> select * from table(cast(strtab('11,12,13') as mytabletype));COLUMN_VALUE
    ------------
             11
             12
             13SQL> create table bb(id varchar2(2),name varchar2(10));Table createdSQL> insert into bb values('11','张三');1 row insertedSQL> insert into bb values('12','李四');1 row insertedSQL> insert into bb values('13','王五');1 row insertedSQL> select * from bb where id in (select * from table(cast(strtab('11,12,13') as mytabletype)));ID NAME
    -- ----------
    11 张三
    12 李四
    13 王五
      

  2.   

    楼上的写在SQL里面是可以的,我知道,用动态SQL也可以.但是我现在是在存储过程中间添加,而且是用的SET PARAMTER的方法把参数写进去的,这样的话好象是把参数写死了,不知道还有没有别的解决方法.