簡體   English   中英

Oracle Apex - 逗號分隔LOV

[英]Oracle Apex - Comma Separated LOV

我正在使用Oracle Apex 4,2。 我有一個表中有一個名為'versions'的列。 在每行的“版本”列中,有一個由逗號分隔的值列表,例如“1,2,3,4”。
我正在嘗試創建一個選擇列表,其值列表將是其中一行以逗號分隔的每個值。 SQL查詢會是什么?

例:

表名:產品

Name     | Versions
--------------------
myProd1  | 1,2,3
myProd2  | a,b,c

期望的輸出:
兩個選擇列表。
第一個是顯而易見的,我只是從products表中選擇name列。 這樣,用戶可以選擇他們想要的任何產品。 第二個是我不確定的。 假設用戶已從第一個選擇列表中選擇“myProd1”。 然后第二個選擇應包含以下值列表供用戶選擇:'1.0','1.1'或'1.2'。

閱讀完最新評論后,我明白你想要的不是一個LOV,而是一個列表項。 雖然它也可以是LOV。 第一個列表項/ lov將只包含用戶從中選擇的所有產品,例如Prod1,Prod2,Prod3 ......第二個列表項將使用逗號分隔值轉換所有版本,如下例所示。 。 因為在我的理解中,用戶可以從該列表中僅為每個產品選擇一個值。 單個產品可能有許多值,例如Prod1的值為1,2,3,4。但用戶只需選擇一個。 正確? 這就是您需要將逗號值轉換為表的原因。 第一個查詢選擇是smth lk這個:

SELECT prod_id
  FROM your_prod_table
 /

 id      
 --------
 myProd1 
 myProd2 
 .....

第二個查詢應該選擇product_id在your_prod_table中的所有版本:

 SELECT version FROM your_versions_table
   WHERE prod_id IN (SELECT prod_id FROM your_prod_table)
 /

 Versions
 --------
 1,2,3,4   -- myProd1 values
 a,b,c,d   -- myProd2 values
 .....

以上將返回產品的所有版本,例如myProd1等的所有值...

使用我的示例轉換逗號sep。 表的值。 將harcoded'1,2,3,4'替換為您表中的值列。 將dual替換為您的表名

如果您需要單個查詢中的產品和版本以及單個結果,則只需加入/外連接(左,右連接)兩個表。

SELECT p.prod_id, v.version 
  FROM your_prod_table     p
     , your_versions_table v
  WHERE p.prod_id = v.prod_id
 /

在這種情況下,您將在輸出中獲得smth lk:

 id      |  Values
 ------------------
 myProd1 | 1,2,3,4
 myProd2 | a,b,c,d

如果你在上面的查詢中將逗號轉換為表格,那么你將得到這個 - 所有在一個列表或LOV中:

 id      |  Values
 ------------------
 myProd1 | 1
 myProd1 | 2
 myProd1 | 3
 myProd1 | 4
 myProd2 | a
 myProd2 | b
 myProd2 | c
 myProd2 | d

我希望這有幫助。 同樣,如果在APEX中可用,您可以使用LOV或列表值。 兩個單獨的值列表 - 一個用於其他版本的產品 - 對我來說更有意義。 對於列表項,您將需要兩個單獨的查詢,如上所述,只有值/版本的表轉換更容易。 但是取決於你。

逗號到表示例:

-- Comma to table - regexp_count --
SELECT trim(regexp_substr('1,2,3,4', '[^,]+', 1, LEVEL)) str_2_tab
  FROM dual
 CONNECT BY LEVEL <= regexp_count('1,2,3,4', ',')+1
/

-- Comma to table - Length -
SELECT trim(regexp_substr('1,2,3,4', '[^,]+', 1, LEVEL)) token
  FROM dual
CONNECT BY LEVEL <= length('1,2,3,4') - length(REPLACE('1,2,3,4', ',', ''))+1
/

-- Comma to table - instr --
SELECT trim(regexp_substr('1,2,3,4', '[^,]+', 1, LEVEL)) str_2_tab
  FROM dual
 CONNECT BY LEVEL <= instr('1,2,3,4', ',', 1, LEVEL - 1)
/

以上所有內容的輸出是相同的:

STR_2_TAB
----------
1
2
3
4

表格的逗號 - PL / SQL-APEX示例。 對於LOV,您需要SQL而不是PL / SQL。

DECLARE
  v_array apex_application_global.vc_arr2;
  v_string varchar2(2000);
BEGIN
-- Convert delimited string to array
   v_array:= apex_util.string_to_table('alpha,beta,gamma,delta', ',');

  FOR i in 1..v_array.count LOOP
    dbms_output.put_line('Array: '||v_array(i));
  END LOOP;

 -- Convert array to delimited string
  v_string:= apex_util.table_to_string(v_array,'|');
  dbms_output.put_line('String: '||v_string);
END;
/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM