如何从Oracle Apex中的表格单元格中的逗号分隔值列表中创建选择列表?

时间:2013-04-18 13:11:01

标签: sql list select oracle-apex

我有一个名为产品的表格,它有以下3列: ID 名称版本 。对于任何给定的行,版本列可能有多个以逗号分隔的版本。我想知道的是如何在我的Apex应用程序中创建一个包含LOV的选择列表,每个版本用逗号分隔?

示例,如果我在产品表中有以下行:

1 | myProduct | 1.0, 1.1, 1.2

如何在我的Apex应用程序中创建一个显示以下LOV的选择列表:'1.0','1.1'或'1.2'?

2 个答案:

答案 0 :(得分:2)

当然有可能。请注意,选择列表要求您按行返回数据,因此我们需要将连接的字符串转换为行。 我个人喜欢使用XML来做到这一点:

SELECT trim(val)
FROM 
  xmltable('/root/e/text()' passing XMLTYPE('<root><e>'
  || REPLACE('1.1, 1.2, 1.3, 1.4',',','</e><e>')
  || '</e></root>') columns val VARCHAR2(50) path '/' )

将返回

TRIM(VAL)
---------
1.1
1.2
1.3
1.4

所以你可以像这样申请:

WITH prd_versions AS (
  SELECT versions FROM products WHERE id = :PX_PRODUCT_ID
)
SELECT trim(val)
FROM prd_versions p,
  xmltable('/root/e/text()' passing XMLTYPE('<root><e>'
  || REPLACE(p.v,',','</e><e>')
  || '</e></root>') columns val VARCHAR2(50) path '/' )

当然有其他方法可以将字符串拆分成行,就像谷歌快速向您展示一样!

答案 1 :(得分:1)

假设您使用的是简单表单,而不是表格形式,那么您可以这样做:

  1. 创建一个隐藏项目以保存列product.versions的值,例如P1_VERSIONS。
  2. 将选择列表的“值列表定义”设置为:STATIC2:&P1_VERSIONS.
  3. (您可能需要从存储在P1_VERSIONS中的值中修剪空格。)