ORACLE从函数返回而不创建新类型

ORACLE从函数返回而不创建新类型,oracle,function,types,oracle11g,return,Oracle,Function,Types,Oracle11g,Return,我想创建一个函数(Oracle11g),它将返回多个值,但不必创建新类型。最终目标比我提供的示例要复杂得多,但除了返回值之外,我几乎可以做其他任何事情 这是一个非常简单的版本,我有麻烦 例如,下表(员工): 我希望返回以下语句从员工中选择CHILD\FN: GEORGE RON RIRCHARD JANE RACHEL JORDAN 这被简化以显示我遇到问题的部分 下面是一个示例代码: create or replace function CHILD_FN RETURN employee.em

我想创建一个函数(Oracle11g),它将返回多个值,但不必创建新类型。最终目标比我提供的示例要复杂得多,但除了返回值之外,我几乎可以做其他任何事情

这是一个非常简单的版本,我有麻烦

例如,下表(员工):

我希望返回以下语句
从员工中选择CHILD\FN

GEORGE
RON
RIRCHARD
JANE
RACHEL
JORDAN
这被简化以显示我遇到问题的部分 下面是一个示例代码:

create or replace function CHILD_FN RETURN employee.emplname%TYPE IS
    chldnames employee.emplname%TYPE;

CURSOR child_cur
IS 
Select emplchildren FROM employees;


  begin

      /*do complicated parsing to separate each delimited 
       value of child_cur and assign
       it to a new row in the names_col variable/

      /*how do I add values to the names_col variable?  I've tried
      'chldnames.extend',
      various types of 'bulk collect into chldnames'
      and they all give various errors*/


      return chldnames;

end LOCAL_TEST_FN;
我是否需要更改退货类型,还是未正确声明?
我并不完全反对在数据库中创建一个新类型,只是我们在不必创建新类型的情况下已经取得了很大的进步,我能做的越简单越好。如果有办法的话,我更愿意用这种方法学习,并决定哪种方法更好


如果我需要提供更多信息,请告诉我。

有许多预定义的集合非常有用。例如,我通常使用sys.odciVarchar2List,VARCHAR2(4000)的VARRAY(32767)。但通常只适用于临时代码。对于生产代码,您最好创建自己的类型。如果有人决定撤销对标准对象的访问权,这将使事情变得更清楚,也不太可能引起问题

create or replace function child_fn return sys.odcivarchar2list is
    childnames sys.odcivarchar2list := sys.odcivarchar2list();
begin
    --Add elements
    childnames.extend;
    childnames(childnames.last) := 'GEORGE';
    childnames.extend;
    childnames(childnames.last) := 'RON';
    --...

    --Also could use something like this:
    --childnames := sys.odciVarchar2List('GEORGE','RON','RIRCHARD','JANE');

    return childnames;
end;
/

--For SQL it's often more convenient to use it like a table:
select column_value from table(child_fn);
create or replace function child_fn return sys.odcivarchar2list is
    childnames sys.odcivarchar2list := sys.odcivarchar2list();
begin
    --Add elements
    childnames.extend;
    childnames(childnames.last) := 'GEORGE';
    childnames.extend;
    childnames(childnames.last) := 'RON';
    --...

    --Also could use something like this:
    --childnames := sys.odciVarchar2List('GEORGE','RON','RIRCHARD','JANE');

    return childnames;
end;
/

--For SQL it's often more convenient to use it like a table:
select column_value from table(child_fn);