ListAgg() ORA-01002: 提取乱序
Posted
技术标签:
【中文标题】ListAgg() ORA-01002: 提取乱序【英文标题】:ListAgg() ORA-01002: fetch out of sequence 【发布时间】:2016-07-11 03:52:42 【问题描述】:我正在运行一个查询,我不想在 GROUP BY 子句中包含 GL 列,因为我不想为 GL 字段的每个变体显示不同的行。但我需要在后续处理中评估该字段,将其与动态生成的 GL 编号列表进行比较。我能想到的最好方法是使用一个函数,我正在尝试 ListAgg()。首先,是否有更好的函数用于将每一行的 GL 与列表进行比较?此外,我可以使用 SQL Developer 获得以下结果,但当我尝试在 Oracle 返回 ORA-01002 错误的网页上输出结果时却无法获得。我们在这两种情况下都使用 12c。下面是查询和输出。如果没有 ListAgg(),我必须在 SELECT 和 GROUP BY 中包含 GL 列,并且它不希望为每个 GL 输出单独的行。
SELECT h.h_spa_id as spa_id,
h.submit_dt,
h.oa_ap_date,
ListAgg(gl,',') within group (order by gl) "mygl"
WHERE h.next_apprv= 'approverID'
and h.table1_id = d.table2_id
and h.table1_id = table3_id
group by h.h_spa_id,h.submit_dt,h.oa_ap_date
order by h.h_spa_id
H_SPA_ID SUBMIT_DT OA_AP_DATE MYGL
1627005 1/25/2008 10:11:53 AM 1/25/2008 11:15:56 AM 52287,52287,52287,52287,52287,52287,52287,52287,52287,52287,52385,52385,52385,52385,52385,52385,52385,52385,52385,52385,52385,52385,52385,52385,52385
【问题讨论】:
你选择的 FROM 子句在哪里? 【参考方案1】:您可以使用CAST
和COLLECT
将其分组为一个集合:
SELECT h.h_spa_id as spa_id,
h.submit_dt,
h.oa_ap_date,
CAST( COLLECT( DISTINCT gl ) AS SYS.ODCINUMBERLIST ) AS mygl
FROM h
INNER JOIN
d
ON ( h.table1_id = d.table2_id )
WHERE h.next_apprv = 'approverID'
AND h.table1_id = table3_id
GROUP BY h.h_spa_id,
h.submit_dt,
h.oa_ap_date
ORDER BY h.h_spa_id
然后,当您将其用于后续处理时,值将在一个数组中。
【讨论】:
以上是关于ListAgg() ORA-01002: 提取乱序的主要内容,如果未能解决你的问题,请参考以下文章
pl/sql 存储函数 ora-01002 无序获取 SIMPLE
SQL 中的 STUFF 等效函数(MySQL 中的 GROUP_CONCAT / Oracle 中的 LISTAGG)