有没有一种方法可以将对象用作UDF的输入参数?当我尝试以下时:
CREATE OR REPLACE TYPE fv_group as object(
fv NUMBER,
group_number INTEGER
);
/
CREATE OR REPLACE TYPE fv_group_array IS VARRAY(100) OF fv_group;
CREATE OR REPLACE PROCEDURE insert_groupby(FV NUMBER, fv_and_group IN OUT fv_group_array) IS
g fv_group;
BEGIN
IF fv < 15 THEN
g := fv_group(fv,1);
ELSE
g := fv_group(fv,2);
END IF;
fv_and_group.extend(1);
fv_and_group(fv_and_group.last) := g;
END;
/
declare
obj fv_group_array := fv_group_array();
begin
select insert_groupby(c.fv,obj)
from cophir c;
end;
/
当我执行上面的代码时,我得到了错误 PL / SQL:ORA-00904 。
PS ..表cophir:
SQL> desc cophir
Nome Tipo
FV NUMBER(38)
ID NUMBER(38)
答案 0 :(得分:3)
要回答您的问题:是的,您可以将对象传递给UDF。但这不是你的问题。
在代码末尾的匿名块中,您具有以下语句
select insert_groupby(c.fv,obj)
from cophir c;
但是,insert_groupby
是一个过程。无法从SQL语句调用过程,因为它们不返回值。您也许可以将insert_groupby
更改为一个函数,但是您需要弄清楚它应该返回什么。
另一种选择是使用循环:
declare
obj fv_group_array := fv_group_array();
begin
FOR aRow IN (SELECT fv FROM cophir)
LOOP
insert_groupby(aRow.fv, obj);
END LOOP;
end;
好运。