利用对象类型通过字符串分析出数据函数:
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
         13

解决方案 »

  1.   

    SQL> create table bb(id varchar2(2),name varchar2(10));表被创建SQL>  insert into bb values('11','张三');1 行 已插入SQL>  insert into bb values('12','李四');1 行 已插入SQL>  insert into bb values('13','王五');1 行 已插入SQL> select * from bb where id in (select * from table(cast(strtab('11,12,13') as mytabletype)));ID NAME
    -- ----------
    11 张三
    12 李四
    13 王五
      

  2.   

    mytabletype 是一个什么东西?能详细解释一下么?谢谢了
      

  3.   

    create or replace procedure test(content varchar2) is
      i pls_integer;
      j pls_integer;
      str varchar2(100);
     
      type tarr is varray(100) of number;
      arr tarr:=tarr();
      
      rec emp%rowtype;
    begin
      i:=0;
      str:=content;
      
      loop
        j:=instr(str,',');
        
        arr.extend;
        i:=i+1;
        if j<=0 then
          arr(i):=str;
        else
          arr(i):=substr(str,1,j-1);
          str:=substr(str,j+1);    
        end if;    exit when j<=0;
      end loop;  
      
      for i in arr.first..arr.last loop
        select * into rec from emp where employee_id=arr(i);
        dbms_output.put_line(rec.employee_id||' '||rec.first_name); 
      end loop;  
    end;