发表于: 2005.02.21 16:47
分类: Oracle is anything
出处: http://bitirainy.itpub.net/post/330/18893
---------------------------------------------------------------
首先创建type和函数,分数字类型和字符类型两种:
create or replace type numTableType as table of number;
create or replace type vartabletype is table of varchar2(2000);
create or replace function str2varList( p_string in varchar2 ) return VarTableType
as
v_str long default p_string || ',';
v_n varchar2(2000);
v_data VarTableType := VarTableType();
begin
loop
v_n :=instr( v_str, ',' );
exit when (nvl(v_n,0) = 0);
v_data.extend;
v_data( v_data.count ) := ltrim(rtrim(substr(v_str,1,v_n-1)));
v_str := substr( v_str, v_n+1 );
end loop;
return v_data;
end;
create or replace function str2numList( p_string in varchar2 ) return numTableType
as
v_str long default p_string || ',';
v_n number;
v_data numTableType := numTableType();
begin
loop
v_n := to_number(instr( v_str, ',' ));
exit when (nvl(v_n,0) = 0);
v_data.extend;
v_data( v_data.count ) := ltrim(rtrim(substr(v_str,1,v_n-1)));
v_str := substr( v_str, v_n+1 );
end loop;
return v_data;
end;
alibaba@OCN> set line 1000
set">alibaba@OCN>set pagesize 0
select">alibaba@OCN>select id,name from resources where id in (1200, 1201,1216,1217,1218,1202,1203,1213,1214,1215);
1200 买
1201 卖
1202 代理
1203 合作
1213 GMT-12
1214 GMT-11
1215 GMT-10
1216 GMT-9
1217 GMT-8 太平洋时间(美国和加拿大)
1218 GMT-7 山地时间(美国和加拿大)
10 rows selected.
select">alibaba@OCN>select /*+ordered use_nl(a b)*/ b.id ,b.name
2 from table (str2numList('1200, 1201,1216,1217,1218,1202,1203,1213,1214,1215') ) a,
3 resources b
4 where a.column_value= b.id;
1200 买
1201 卖
1216 GMT-9
1217 GMT-8 太平洋时间(美国和加拿大)
1218 GMT-7 山地时间(美国和加拿大)
1202 代理
1203 合作
1213 GMT-12
1214 GMT-11
1215 GMT-10
10 rows selected.











