PL/SQL 函数体返回 SQL 查询

问题描述 投票:0回答:1

我想在 Oracle APEX 中进行 1 种简单的开发,例如,我在顶部有一个选择列表,在底部有报告,选择列表将显示一些表名称的列表。单击该按钮后,我的报告应显示所选表的数据。在报告中,我使用

PL/SQL function body returning SQL Query
作为报告来源。在我的包中,我有一个函数,它将返回查询以显示所选表的数据。例如,对于选定的值“EMP”,它返回
select * from EMP

但是在交互式报告的源中,我做了这样的事情:

declare
  v_result varchar2(4000);
begin
  v_result := EBA_DEMO_CARD_PKG.show_data(:P50_TNAME);
 return v_result;
end

在这里,ofc你将了解什么是包名、函数名、页面项名和返回变量。所以我在外部也通过执行函数体进行交叉检查,它确实返回像

select * from EMP
这样的查询值,因此根据 APEX,它得到一个返回 SQL 查询的 PL/SQL 函数体,但仍然不接受这一点。还说

ORA-20001:查询必须以 SELECT 或WITH 开头

我不知道该怎么做,或者我们有任何其他替代解决方案可以让我从选择列表中选择表名称,然后报告将显示相应表的数据?

我想根据选择列表选择检索表的数据

oracle-apex
1个回答
1
投票

您100%确定查询是正确的吗?首先要做的就是通过调试代码来验证情况是否如此。将页面进程更改为

declare
  v_result varchar2(4000);
begin
  v_result := EBA_DEMO_CARD_PKG.show_data(:P50_TNAME);
  apex_debug.info(
    p_message => q'#debug query: %0#',
    p0        => :P10_SLOT_BOOKING_ID);
  return v_result;
end;

然后在调试模式下运行页面并查找包含字符串“debug query”的条目。

需要注意的一件事是您在帖子中提到了交互式报告。请注意,交互式报告在编译时仅支持固定数量的列。因此,您需要确保您的函数返回固定数量的列,或者改用经典报告。

另一件事是,这不是“一种简单的开发类型”。 APEX 报告假定查询在设计时已知。创建带有动态查询的页面是可能的,但在 APEX 中并不是一件简单的任务

© www.soinside.com 2019 - 2024. All rights reserved.