关于oracle function的问题-到底应该定义什么样的参数类型呢
我有一个问题,不知道是如何,希望有高人能为我解答一下:
我想写一个函数,用来做字符串的拆分,参数是sql的执行结果,可能是多条记录的,希望通过pipe显示出来,代码如下:
CREATE OR REPLACE FUNCTION fn_split_obj (p_tab IN str_table, p_delimiter IN VARCHAR2)
RETURN ty_str_split PIPELINED
IS
j INT := 0;
i INT := 1;
n int ;
len INT := 0;
len1 INT := 0;
str VARCHAR2 (4000);
p_str VARCHAR2 (4000);
BEGIN
for n in 1 ..p_tab.count loop
p_str:=p_tab(n);
len := LENGTH (p_str);
len1 := LENGTH (p_delimiter);
WHILE j < len LOOP
j := INSTR (p_str, p_delimiter, i);
IF j = 0 THEN
j := len;
str := SUBSTR (p_str, i);
PIPE ROW (str);
IF i >= len THEN
EXIT;
END IF;
ELSE
str := SUBSTR (p_str, i, j - i);
i := j + len1;
PIPE ROW (str);
END IF;
END LOOP;
END LOOP;
RETURN;
END fn_split_obj;
其中,对象p_tab 无论定义为以下哪种方式:
CREATE OR REPLACE TYPE str_table AS VARRAY(375) OF VARCHAR2(2000);
CREATE OR REPLACE TYPE str_table AS table OF VARCHAR2(2000);
在执行select * from table(fn_split_obj((select id from t_rec_comm where billno='30987_20100323007'),','));的时候都提示参数类型错误,谁能告诉我,到底应该定义什么样的参数类型呢?
我想写一个函数,用来做字符串的拆分,参数是sql的执行结果,可能是多条记录的,希望通过pipe显示出来,代码如下:
CREATE OR REPLACE FUNCTION fn_split_obj (p_tab IN str_table, p_delimiter IN VARCHAR2)
RETURN ty_str_split PIPELINED
IS
j INT := 0;
i INT := 1;
n int ;
len INT := 0;
len1 INT := 0;
str VARCHAR2 (4000);
p_str VARCHAR2 (4000);
BEGIN
for n in 1 ..p_tab.count loop
p_str:=p_tab(n);
len := LENGTH (p_str);
len1 := LENGTH (p_delimiter);
WHILE j < len LOOP
j := INSTR (p_str, p_delimiter, i);
IF j = 0 THEN
j := len;
str := SUBSTR (p_str, i);
PIPE ROW (str);
IF i >= len THEN
EXIT;
END IF;
ELSE
str := SUBSTR (p_str, i, j - i);
i := j + len1;
PIPE ROW (str);
END IF;
END LOOP;
END LOOP;
RETURN;
END fn_split_obj;
其中,对象p_tab 无论定义为以下哪种方式:
CREATE OR REPLACE TYPE str_table AS VARRAY(375) OF VARCHAR2(2000);
CREATE OR REPLACE TYPE str_table AS table OF VARCHAR2(2000);
在执行select * from table(fn_split_obj((select id from t_rec_comm where billno='30987_20100323007'),','));的时候都提示参数类型错误,谁能告诉我,到底应该定义什么样的参数类型呢?
作者: 9206025 发布时间: 2011-08-30
虽然不懂~~但是男人的感觉告诉我应该用游标~~
还有,为什么不把执行的那条sql语句放到一个函数里
还有,为什么不把执行的那条sql语句放到一个函数里
作者: huyueqy 发布时间: 2011-08-31