日期:2014-05-17  浏览次数:20805 次

Oracle 表函数
请教下Oracle 表函数的写法,
在baidu里搜索半天没找到。

表函数
想实现如下功能:
传递一个字符串:
假设传递‘aw298fdf',
函数返回表的内容(字符串拆分多列):
顺便说明些创建表 函数语法,非常感谢!
a
w
2
9
8
f
d
f

------解决方案--------------------
SQL code

CREATE OR REPLACE TYPE "T_VC" is table of varchar2(100);
/
create or replace function f_test(i_str varchar2)return t_vc
as
v_str_table t_vc;
begin
 v_str_table := t_vc();
  for i in 1..length(i_str) loop
    v_str_table.extend;
    v_str_table(i):=substr(i_str,i,1);
  end loop;
  return v_str_table;
end;
/

SQL> select * from table(f_test('aw298fdf'));
 
COLUMN_VALUE
--------------------------------------------
a
w
2
9
8
f
d
f
 
8 rows selected

------解决方案--------------------
SQL code

CREATE OR REPLACE TYPE "T_VC" is table of varchar2(100);  --定义一个数组类型
/
create or replace function f_test(i_str varchar2)return t_vc  --定义返回数组类型的函数
as
v_str_table t_vc;  --定义一个数组类型变量
begin
 v_str_table := t_vc();  --初始构造,数组大小为0
  for i in 1..length(i_str) loop  --循环参数i_str里的每个字符
    v_str_table.extend;   --增加数组大小加1
    v_str_table(i):=substr(i_str,i,1);  --一个个字符截取,保存到数组里
  end loop;
  return v_str_table;  --返回数组
end;
/

SQL> select * from table(f_test('aw298fdf'));   --用table函数展示数组结果
 
COLUMN_VALUE
--------------------------------------------
a
w
2
9
8
f
d
f
 
8 rows selected

------解决方案--------------------
很不容易,给点分吧
------解决方案--------------------
实测成功,但“表函数”是什么意思呢?不太理解。
SQL code

CREATE OR REPLACE TYPE StringArray IS TABLE OF VARCHAR2(20);

------解决方案--------------------
探讨

很不容易,给点分吧

------解决方案--------------------
SELECT substr(a, LEVEL, 1) t 
FROM (SELECT '中国人' a FROM dual)
CONNECT BY level <= length(a)



中 
国 
人 

我喜欢用这个拆分