PL/SQL 逗号分隔列表;删除重复项并放入数组

PL/SQL comma delimited list; remove dups and put in array(PL/SQL 逗号分隔列表;删除重复项并放入数组)
本文介绍了PL/SQL 逗号分隔列表;删除重复项并放入数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个逗号分隔的列表作为 PL/SQL 过程中的字符串.我需要

I have a comma delimited list as a string in a PL/SQL procedure. I need to

  1. 删除重复项
  2. 将列表放入数组中.

我找到了多种方法可以做到这两者,但不能两者兼而有之.有什么帮助吗?

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 逗号分隔列表;删除重复项并放入数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

SQL to Generate Periodic Snapshots from Transactions Table(用于从事务表生成定期快照的SQL)
MyBatis support for multiple databases(MyBatis支持多个数据库)
Oracle 12c SQL: Missing column Headers in result(Oracle 12c SQL:结果中缺少列标题)
SQL query to find the number of customers who shopped for 3 consecutive days in month of January 2020(查询2020年1月连续购物3天的客户数量)
How to get top 10 data weekly (This week, Previous week, Last month, 2 months ago, 3 month ago)(如何每周获取前十大数据(本周、前一周、上个月、2个月前、3个月前))
Select the latest record for an Id per day - Oracle pl sql(选择每天ID的最新记录-Oracle pl SQL)