我正在使用ORACLE APEX 5.1.1并希望显示基于“PL / SQL函数体返回SQL查询”的图表。该函数根据选择列表的值更改SQL查询。因此,只要选择列表发生变化,图表就会发生变化。我已经设置了所需的所有查询和动态操作,功能正常。但图表显示错误的“标签槽”(x轴上的类别)中的值。为了澄清错误的图表显示,我还基于完全相同的功能创建了一个经典报告,它正确显示了值。
我在https://apex.oracle.com的评估帐户上复制了一个最小例子。一切都是它应该的样子。 apex.oracle.com目前的版本是5.1.3。所以我想知道这是否是修复版本5.1.1中的错误。但是,我在发行说明中找不到任何关于此问题的信息。 是否有人知道此错误或可以帮助我解决5.1.1中的问题?很遗憾,我暂时无法在公司环境中升级到5.1.3。
这是我用于两者的PL / SQL,经典报告和图表:
declare
q varchar2(32767);
begin
q :=
'
select
type1, type2, sum(to_number(val)) as val
from (
SELECT ''a'' as type1, ''x'' as type2, ''1'' as val
FROM DUAL
UNION ALL
SELECT ''a'' as type1, ''y'' as type2, ''2'' as val
FROM DUAL
UNION ALL
SELECT ''a'' as type1, ''z'' as type2, ''3'' as val
FROM DUAL
UNION ALL
SELECT ''b'' as type1, ''x'' as type2, ''3'' as val
FROM DUAL
UNION ALL
SELECT ''b'' as type1, ''z'' as type2, ''3'' as val
FROM DUAL
UNION ALL
SELECT ''c'' as type1, ''x'' as type2, ''2'' as val
FROM DUAL
UNION ALL
SELECT ''c'' as type1, ''y'' as type2, ''-2'' as val
FROM DUAL
UNION ALL
SELECT ''d'' as type1, ''y'' as type2, ''-3'' as val
FROM DUAL
UNION ALL
SELECT ''d'' as type1, ''z'' as type2, ''1'' as val
FROM DUAL
UNION ALL
SELECT ''e'' as type1, ''x'' as type2, ''1'' as val
FROM DUAL
UNION ALL
SELECT ''a'' as type1, ''z'' as type2, ''3'' as val
FROM DUAL
)
'
;
if :TEST_VALS = 'only positive' then q := q || ' where val >= 0';
elsif :TEST_VALS = 'only negative' then q := q || ' where val <= 0';
end if;
q := q || ' group by type1, type2 order by type1, type2';
return q;
end;
:TEST_VALS
指的是值为all, only positive, only negative
的静态选择列表。动态操作设置为选择列表中的更改时刷新和经典报告和图表中的“要提交的页面项目”。
下面你会看到3个截图,显示5.1.1中的错误以及5.1.3中正确的图表显示。
答案 0 :(得分:0)
最终,我在这里找到了答案:https://community.oracle.com/thread/4069783
这个问题与PL / SQL函数没有任何关系。在ORACLE APEX版本5.1.3之前,任何图表都需要在每个系列中存在相同数量的数据点。因此,您需要自己在查询中添加数据密度。我同意ORACLE开发人员的以下引用,认为这不是最佳的......
对于5.1,我们故意离开了#densification&#39;的数据 客户通过他们的SQL查询处理。然而,这导致了一些 论坛和会议上的混乱和许多问题,所以 我们已经修改了我们即将推出的5.1.3补丁集的行为 发布。在该版本中,我们现在将自动处理 注入缺少的数据点,以确保产生JSON 对象符合JET要求具有相同数量的数据 每个x轴标签的多系列图表的每个系列中的点。 我无法提供5.1.3何时可用的详细信息 现在,您可以在查询中管理密度化。