我正在创建一个返回表格的函数。该函数基本上是在两个表之间进行比较,并返回如果两个表包含不同数据的数据集
P_min_id 和 p_max_id 是可以忽略的,一旦此功能起作用,将来会实施。
我修改了http://www.adp-gmbh.ch/ora/plsql/coll/return_table.html的原始代码。错误消息在以下代码中进行了注释。
create or replace function return_objects(
p_min_id in number,
p_max_id in number
)
return t_nested_table as
v_ret t_nested_table;
begin
select * // Error(8,7): PL/SQL: SQL Statement ignored
into
v_ret
from
(
select
*
from
(
select * from
(
select * from SCHEMA.TEST
minus
select * from SCHEMA.TEST_1
)
union all
select * from
(
select * from SCHEMA.TEST_1
minus
select * from SCHEMA.TEST
)
)
)
return v_ret;
end return_objects;
如果您可以修复我的代码,我将不胜感激,但我想知道为什么这段代码不起作用。请给我一些关键词,以便我可以研究。或者相关网站也将受到赞赏。
答案 0 :(得分:4)
在SQL语句结束后添加分号,并使用bulk collect
填充嵌套表。这是一个有效的例子:
create or replace type t_nested_table is table of varchar2(100);
create or replace function return_objects(
p_min_id in number,
p_max_id in number
)
return t_nested_table as
v_ret t_nested_table;
begin
select *
bulk collect into v_ret
from
(
select 'A' from dual union all
select 'B' from dual
);
return v_ret;
end;
/
select return_objects(1,2) from dual;
<强>更新强>
根据问题编辑,还有一个特权问题。您的用户可能通过角色访问表,但要创建功能,应该直接向您的用户授予这些权限。