【问题标题】:How to make a select list from a list of comma-separated values in a table cell in Oracle Apex?如何从 Oracle Apex 的表格单元格中的逗号分隔值列表中创建选择列表?
【发布时间】:2013-04-18 13:11:00
【问题描述】:

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

例如,如果我在 Products 表中有以下行:

1 | myProduct | 1.0, 1.1, 1.2

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

【问题讨论】:

  • 也许也是一个好问题:为什么这些值是逗号分隔值?为什么不在表格“版本”中?当然,也许您只是在使用现有的代码库,但也许您也在设计数据模型和/或有能力改变它?
  • 您是对的,但我正在使用现有的代码库,您知道是否可以在不更改模型以拥有单独的版本表的情况下完成它?

标签: sql list select oracle-apex


【解决方案1】:

当然可以。请注意,选择列表希望您以行的形式返回数据,因此我们需要将连接的字符串转换为行。 我个人喜欢使用 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 '/' )

当然还有其他方法可以将字符串拆分为行,Google 可以快速向您展示!

【讨论】:

    【解决方案2】:

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

    1. 创建一个隐藏项来保存列 product.versions 的值,例如P1_VERSIONS。
    2. 将选择列表的“值定义列表”设置为:STATIC2:&amp;P1_VERSIONS.

    (您可能需要从存储在 P1_VERSIONS 中的值中删除空格。)

    【讨论】:

      猜你喜欢
      • 2016-12-28
      • 2020-09-26
      • 1970-01-01
      • 2021-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多