2013-04-18 53 views
0

我有一個名爲產品表,它具有以下3列:ID名稱版本。對於任何給定的行,版本列可能有多個以逗號分隔的版本。我想知道的是,如何在我的Apex應用程序中創建一個包含在LOV中的選擇列表,每個版本由逗號分隔?如何從Oracle Apex的表格單元格中的逗號分隔值列表中選擇列表?

例如,如果我在產品下面一行表:

1 | myProduct | 1.0, 1.1, 1.2 

我怎麼能在我的Apex應用程序,它會顯示以下LOV創建一個選擇列表:「1.0」,「1.1 '還是'1.2'?

+0

也許一個很好的問題太多:爲什麼這些值是以逗號分隔的值嗎?爲什麼不在一個表「版本」?也許你只是從現有的代碼庫開始工作,但也許你正在設計數據模型和/或有能力改變它? – Tom

+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 '/') 

當然也有其他的方式來分割將字符串分成若干行,就像Google可以向您展示的那樣!

1

假設你使用的是簡單的形式,而不是一個表格的形式,那麼你可以這樣做:

  1. 創建一個隱藏的項目例如抱柱product.versions的價值P1_VERSIONS。
  2. 設置「值定義的列表」選擇列表:STATIC2:&P1_VERSIONS.

(您可能需要從存儲在P1_VERSIONS值修剪空格。)

相關問題