我正在尝试编写一个函数以返回代码列表。
在包装规格书中我已经声明了
type codes_t is table of number;
和
function getCodes(
acc_id in Account.id%type
)
return codes_t;
我体内有
function getCodes(
acc_id in Account.id%type
)
return codes_t
is
v_codes codes_t := codes_t();
begin
for row in (select ...) loop
v_codes.extend();
v_codes(v_codes.count) := row.code;
end loop;
return codes_t;
程序包编译器没有错误,但是当我尝试使用
调用函数时select pkg.getCodes(123) from dual;
我收到 ORA-00902:无效的数据类型
有什么明显不对吗?
答案 0 :(得分:0)
由于您试图用SQL调用该函数,并且该函数返回一个数组,因此您需要做两件事:
create type ...
),以便SQL引擎可以知道数据类型select * from table(<function>)
做这两件事应该可以帮到你。
答案 1 :(得分:0)
或者它可以被管道化。 Demo
CREATE OR REPLACE PACKAGE pkg
is
type codes_t is table of number;
function getCodes(
acc_id in NUMBER
)
return codes_t PIPELINED;
end pkg;
/
CREATE OR REPLACE PACKAGE BODY pkg
is
function getCodes(
acc_id in NUMBER
) return codes_t PIPELINED
is
v_codes codes_t := codes_t();
begin
for r in (select acc_id as code from dual
union
select acc_id+1 from dual) loop
PIPE row(r.code);
end loop;
end getCodes;
end pkg;
/