首页 > 解决方案 > 如何从包含逗号分隔条目的变量中创建(不同的)值列表?

问题描述

我在 APEX 报告(保存在名为 APR 的表中)中有一个用户生成的变量 (KEYWORDS),它允许用户输入多个(逗号分隔的)值。我想设置一个以前用于允许将来通过弹出 LOV 选择的不同值的列表。

我设法使用创建了一个不同的列表

SELECT distinct regexp_substr((select LISTAGG(KEYWORDS, ',') from APR), '[^,]+', 1, LEVEL) from dual
    connect by regexp_substr((select LISTAGG(KEYWORDS, ',') from APR), '[^,]+', 1, LEVEL)
is not null 
;

哪里select LISTAGG(KEYWORDS, ',') from APR是:'test,test,TEST2,test,TEST2,test,TEST2,test3'

select keywords from APR由6行组成:

test
test,TEST2
test,TEST2
test
TEST2
test3

我的问题是尝试在 Edit LOV 查询中实现这一点。

select (select distinct regexp_substr((select LISTAGG(KEYWORDS, ',') from APR), '[^,]+', 1, LEVEL) from dual
    connect by regexp_substr((select LISTAGG(KEYWORDS, ',') from APR), '[^,]+', 1, LEVEL)
is not null) as display_value, 

(select distinct regexp_substr((select LISTAGG(KEYWORDS, ',') from APR), '[^,]+', 1, LEVEL) from dual
    connect by regexp_substr((select LISTAGG(KEYWORDS, ',') from APR), '[^,]+', 1, LEVEL)
is not null) as return_value 

  from APR
 order by 1

此代码已在编辑 LOV 部分中成功验证,但弹出式 LOV 中未显示任何值。粘贴到 SQL 命令中,我收到以下错误消息: ORA-01427:单行子查询返回多行。

标签: sqloracleplsqloracle-apex

解决方案


您发布的查询无效;listagg需要within group子句。

无论如何:我建议您使用该查询(您可能已经正确编写)作为数据源,如下所示:

with t_data as
  (select listagg(keywords, ',') within group (order by null) col 
   from apr
  )
select col display_value,
       col return_value
from t_data
order by col

推荐阅读