gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 01:09:07 25 4
gpt4 key购买 nike

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

这是我遇到问题的极其简化的版本。

例如下表(员工):

emplid | emplname | emplchildren
478 |SAM |"GEORGE,RON"
479 |JOSE |"RICHARD,JANE,RACHEL"
480 |PAM |"JORDAN"

我希望返回以下语句select CHILD_FN fromEmployees:

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);

关于ORACLE 从函数返回而不创建新类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8555530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com