繁体   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