以下一个例子,就是楼主所要的效果,涉及对象概念,有不明直接提出,帮你解答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 王五

解决方案 »

  1.   

    create or replace type mytabletype as table of varchar2(50);
    /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;
    /
    DECLARE
      --V_PROJECTNAME varchar(300) default '黑龙5期'||','||'江苏5期';
      v_city varchar(300);
      CURSOR c_city IS
        SELECT distinct t1acity PROJECTNAME FROM tablename
        where PROJECTNAME in (select * from table(cast(strtab('黑龙5期'||','||'江苏5期') as mytabletype)));BEGIN
      OPEN c_city;
      loop
        FETCH c_city
          INTO V_city;
        exit when C_city%notfound;
        dbms_output.put_line(V_city);
      end loop;
      CLOSE C_city;
    END;
    /
      

  2.   

    对不起 beckhambobo(beckham) ,只看了内容,高兴之余,没看人名,搞笑了。