为什么 APEX Collection 无法构建?
Why won't APEX Collection build?
我使用 2 个 APEX 集合来 运行 查询,然后在我页面的多个区域中使用它们来显示不同的数据子集。第一个是主要查询,第二个只是根据人口统计特征聚合整个数据集。
第二个足够长,我必须将它拆分为 2 个隐藏项,然后将它们连接到我的 PL/SQL 函数体中。我以前做过多次,但这次查询不会 运行。我怀疑这是由于串联发生的方式所致,但我无法理解为什么或如何解决它。
这里是代码示例 (t运行cated):
<!--hidden item 1, P623057_TOTALS_Q-->
select gender as group_label,
'gender' as category,
count(gender) as total,
0 as schoolid
from staff
group by gender
union
<!--hidden item 2, P623057_TOTALS_Q2-->
select ethnicity,
'ethnicity' as category,
count(ethnicity),
0 as schoolid
from staff
group by ethnicity
还有我的 PL/SQL 函数:
DECLARE
l_query varchar2(32767) := :P623057_TOTALS_Q || :P623057_TOTALS_Q2;
begin
IF APEX_COLLECTION.COLLECTION_EXISTS (p_collection_name => 'DEMTOT') THEN
APEX_COLLECTION.DELETE_COLLECTION (p_collection_name => 'DEMTOT');
end if;
APEX_COLLECTION.CREATE_COLLECTION_FROM_QUERY_B (
p_collection_name => 'DEMTOT',
p_query => l_query);
End;
我试过:
- 在任一隐藏项的 beginning/end 添加 spaces/returns(当 saved/closed APEX 修剪无关的 space 时)
- 连接换行符 (chr(10))
- 移动隐藏项之间的 UNION
- 在 UNION 运算符前添加制表符
有一次它在将 CR/LF 添加到 P623057_TOTALS_Q2 后工作,但是一旦我重新加载页面它就停止工作了。
我得到的错误是:
ora_sqlerrm: ORA-20104: create_collection_from_query_b Error:ORA-20104: create_collection_from_query ParseErr:ORA-00933: SQL command not properly ended ORA-06512
。我已验证查询有效。
我已经有点放弃了,只是让导致我的总计查询的聚合在使用它的区域变得太大 运行,但我很想知道它为什么这样做这个以及我可以做些什么来解决它。
谢谢!
如果您的代码变得太大,那么建议将代码移动到包中。
下面是一个程序包中的过程示例,它根据 emp/dept 示例数据集填充集合。重命名为对您的应用程序有用的名称。
- 创建包
create or replace package mypkg AS
PROCEDURE P1_POPULATE_COLLECTION;
END mypkg;
/
CREATE OR REPLACE
PACKAGE BODY MYPKG AS
PROCEDURE P1_POPULATE_COLLECTION AS
l_query varchar2(32767) := q'!SELECT ename, 'gender' as category FROM EMP!';
BEGIN
IF APEX_COLLECTION.COLLECTION_EXISTS (p_collection_name => 'EMP') THEN
APEX_COLLECTION.DELETE_COLLECTION (p_collection_name => 'EMP');
END IF;
APEX_COLLECTION.CREATE_COLLECTION_FROM_QUERY_B (
p_collection_name => 'EMP',
p_query => l_query);
END P1_POPULATE_COLLECTION;
END MYPKG;
/
- 添加页面进程
添加类型为 pl/sql 的页眉前流程,代码为
mypkg.p1_populate_collection;
在页面项目中放置查询可能会起作用,但我根本不会称之为好的做法。我的建议是加快速度 pl/sql - 这一点都不难,它会让你作为 apex 开发人员的生活 轻松很多。如果你卡住了,总会有堆栈溢出 ;)
我使用 2 个 APEX 集合来 运行 查询,然后在我页面的多个区域中使用它们来显示不同的数据子集。第一个是主要查询,第二个只是根据人口统计特征聚合整个数据集。
第二个足够长,我必须将它拆分为 2 个隐藏项,然后将它们连接到我的 PL/SQL 函数体中。我以前做过多次,但这次查询不会 运行。我怀疑这是由于串联发生的方式所致,但我无法理解为什么或如何解决它。
这里是代码示例 (t运行cated):
<!--hidden item 1, P623057_TOTALS_Q-->
select gender as group_label,
'gender' as category,
count(gender) as total,
0 as schoolid
from staff
group by gender
union
<!--hidden item 2, P623057_TOTALS_Q2-->
select ethnicity,
'ethnicity' as category,
count(ethnicity),
0 as schoolid
from staff
group by ethnicity
还有我的 PL/SQL 函数:
DECLARE
l_query varchar2(32767) := :P623057_TOTALS_Q || :P623057_TOTALS_Q2;
begin
IF APEX_COLLECTION.COLLECTION_EXISTS (p_collection_name => 'DEMTOT') THEN
APEX_COLLECTION.DELETE_COLLECTION (p_collection_name => 'DEMTOT');
end if;
APEX_COLLECTION.CREATE_COLLECTION_FROM_QUERY_B (
p_collection_name => 'DEMTOT',
p_query => l_query);
End;
我试过:
- 在任一隐藏项的 beginning/end 添加 spaces/returns(当 saved/closed APEX 修剪无关的 space 时)
- 连接换行符 (chr(10))
- 移动隐藏项之间的 UNION
- 在 UNION 运算符前添加制表符
有一次它在将 CR/LF 添加到 P623057_TOTALS_Q2 后工作,但是一旦我重新加载页面它就停止工作了。
我得到的错误是:
ora_sqlerrm: ORA-20104: create_collection_from_query_b Error:ORA-20104: create_collection_from_query ParseErr:ORA-00933: SQL command not properly ended ORA-06512
。我已验证查询有效。
我已经有点放弃了,只是让导致我的总计查询的聚合在使用它的区域变得太大 运行,但我很想知道它为什么这样做这个以及我可以做些什么来解决它。
谢谢!
如果您的代码变得太大,那么建议将代码移动到包中。 下面是一个程序包中的过程示例,它根据 emp/dept 示例数据集填充集合。重命名为对您的应用程序有用的名称。
- 创建包
create or replace package mypkg AS
PROCEDURE P1_POPULATE_COLLECTION;
END mypkg;
/
CREATE OR REPLACE
PACKAGE BODY MYPKG AS
PROCEDURE P1_POPULATE_COLLECTION AS
l_query varchar2(32767) := q'!SELECT ename, 'gender' as category FROM EMP!';
BEGIN
IF APEX_COLLECTION.COLLECTION_EXISTS (p_collection_name => 'EMP') THEN
APEX_COLLECTION.DELETE_COLLECTION (p_collection_name => 'EMP');
END IF;
APEX_COLLECTION.CREATE_COLLECTION_FROM_QUERY_B (
p_collection_name => 'EMP',
p_query => l_query);
END P1_POPULATE_COLLECTION;
END MYPKG;
/
- 添加页面进程
添加类型为 pl/sql 的页眉前流程,代码为
mypkg.p1_populate_collection;
在页面项目中放置查询可能会起作用,但我根本不会称之为好的做法。我的建议是加快速度 pl/sql - 这一点都不难,它会让你作为 apex 开发人员的生活 轻松很多。如果你卡住了,总会有堆栈溢出 ;)