入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

一个简单的oracle函数返回数组的例子

创建时间:2007-05-23 投稿人: 浏览次数:6899

create or replace type t_ret_table is table of varchar2(20);

create or replace function f_test(var_num in integer) return t_ret_table is
var_out t_ret_table;
begin
var_out := t_ret_table();
var_out.extend(var_num);
for i in 1..var_num loop
var_out(i) := i;
end loop;
return var_out;
end f_test;
/

 

set serverout on
declare
aa t_ret_table;
begin
aa := f_test(10);
for i in 1..aa.count loop
dbms_output.put_line(aa(i));
end loop;
end;
/

一个分隔字符串的例子:
把"a|||b|||c"字符串分隔成
a
b
c

create or replace function f_test(var_str in string) return t_ret_table is
var_out t_ret_table;
var_tmp varchar2(2000);
var_element varchar2(2000);
begin
var_tmp := var_str;
var_out := t_ret_table();
while instr(var_tmp,"|||")>0 loop
var_element := substr(var_tmp,1,instr(var_str,"|||")-1);
var_tmp := substr(var_tmp,instr(var_str,"|||")+3,length(var_tmp));
var_out.extend(1);
var_out(var_out.count) := var_element;
end loop;
var_out.extend(1);
var_out(var_out.count) := var_tmp;
return var_out;
end f_test;
/


set serverout on
declare
aa t_ret_table;
begin
aa := f_test("a|||b|||c");
for i in 1..aa.count loop
dbms_output.put_line(aa(i));
end loop;
end;
/



create or replace function f_test(var_str in string) return t_ret_table PIPELINED
as
var_tmp varchar2(2000);
var_element varchar2(2000);
begin
var_tmp := var_str;
while instr(var_tmp,"|||")>0 loop
var_element := substr(var_tmp,1,instr(var_str,"|||")-1);
var_tmp := substr(var_tmp,instr(var_str,"|||")+3,length(var_tmp));
pipe row(var_element);
end loop;
pipe row(var_tmp);
return;
end f_test;
/


select * from table(f_test("a|||b|||c"));

另外一个分割字符串的例子:

分割字符串问题!

问题源自http://www.itpub.net/626418.html

/*

怎样支掉字符串中逗号间重复的字符
如 ",1,2,5,9,1,2,5,9,1,2,9,1,2,9,1,2,3,9,1,2,3,9,1,2,9,1,2,9,1,2,3,9,1,2,3,9,"怎样支掉字符串中逗号间重复的字符,并将字符升序排列,得到
",1,2,3,5,9,"
百思不得其解,是高手的试一下。

解答:
select col from(
select sys_connect_by_path(col,",")||"," col,level from(
select col,row_number() over(order by rownum) rn from (
select distinct substr(col,instr(col,",",1,rownum)+1,instr(col,",",1,rownum+1)-instr(col,",",1,rownum)-1) col from (
select ",1,2,5,9,1,2,5,9,1,3,9," col from dual
) connect by rownum<length(translate(col,","||col,","))
)
)
connect by prior rn = rn -1 order by level desc
) where rownum=1

*/

这个问题的解决办法中的一部分(按照固定分隔符分割字符串)可以解决http://www.itpub.net/515354.html

/*

要求用pl/sql写一个函数, 实现根据分割符把原字符串分成若干个字符串功能.

输入: string(字符串) 和 Delimiter (分隔符)
输出: substr1, ..., substrn (根据分割后的字符串排序, 不是子串在原字符串中的顺序)

解答:

select substr(col,instr(col,",",1,rownum)+1,instr(col,",",1,rownum+1)-instr(col,",",1,rownum)-1) col from (
select ",1,2,5,9,1,2,5,9,1,3,9," col from dual
) connect by rownum<length(translate(col,","||col,","))

*/

 
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
  • 上一篇:没有了
  • 下一篇:没有了
未上传头像