关于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'),','));的时候都提示参数类型错误,谁能告诉我,到底应该定义什么样的参数类型呢?

作者: 9206025   发布时间: 2011-08-30

虽然不懂~~但是男人的感觉告诉我应该用游标~~
还有,为什么不把执行的那条sql语句放到一个函数里

作者: huyueqy   发布时间: 2011-08-31