PL/SQL comma delimited list; remove dups and put in array(PL/SQL 逗号分隔列表;删除重复项并放入数组)
问题描述
我有一个逗号分隔的列表作为 PL/SQL 过程中的字符串.我需要
I have a comma delimited list as a string in a PL/SQL procedure. I need to
- 删除重复项
- 将列表放入数组中.
我找到了多种方法可以做到这两者,但不能两者兼而有之.有什么帮助吗?
I have found multiple ways to do either, just not both. Any help?
推荐答案
有一个众所周知的 SQL 技巧可以将逗号分隔的列表转换为行.只需使用该技巧,添加一个 DISTINCT 关键字,然后 BULK COLLECT 将结果放入您的数组中(我假设您的意思是集合).
There is a well-known SQL trick for turning comma-separated lists into rows. Just use that trick, add a DISTINCT keyword, and BULK COLLECT the results into your array (I assume you mean collection).
DECLARE
p_test_string VARCHAR2 (4000) := 'A,B,C,B,B,D';
TYPE string_array_type IS TABLE OF VARCHAR2 (4000);
l_array string_array_type;
BEGIN
SELECT DISTINCT REGEXP_SUBSTR (p_test_string,
'[^,]+',
1,
LEVEL)
BULK COLLECT INTO l_array
FROM DUAL
CONNECT BY REGEXP_SUBSTR (p_test_string,
'[^,]+',
1,
LEVEL)
IS NOT NULL
ORDER BY 1;
DBMS_OUTPUT.put_line ('l_array.count = ' || l_array.COUNT);
DBMS_OUTPUT.put_line ('l_array(2) = ' || l_array (2));
END;
输出:
l_array.count = 4
l_array(2) = B
这篇关于PL/SQL 逗号分隔列表;删除重复项并放入数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:PL/SQL 逗号分隔列表;删除重复项并放入数组
基础教程推荐
- MySQL 5.7参照时间戳生成日期列 2022-01-01
- ORA-01830:日期格式图片在转换整个输入字符串之前结束/选择日期查询的总和 2021-01-01
- MySQL根据从其他列分组的值,对两列之间的值进行求和 2022-01-01
- 如何在 CakePHP 3 中实现 INSERT ON DUPLICATE KEY UPDATE aka upsert? 2021-01-01
- while 在触发器内循环以遍历 sql 中表的所有列 2022-01-01
- CHECKSUM 和 CHECKSUM_AGG:算法是什么? 2021-01-01
- 使用 VBS 和注册表来确定安装了哪个版本和 32 位 2021-01-01
- 带有WHERE子句的LAG()函数 2022-01-01
- 带更新的 sqlite CTE 2022-01-01
- 从字符串 TSQL 中获取数字 2021-01-01
