Oracle
 sql >> база данни >  >> RDS >> Oracle

PL/SQL списък, разделен със запетая; премахване на дублирания и поставяне в масив

Има добре познат SQL трик за превръщане на списъци, разделени със запетая, в редове. Просто използвайте този трик, добавете DISTINCT ключова дума и BULK COLLECT резултатите във вашия масив (предполагам, че имате предвид колекция).

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Липсващ израз при избиране на всички колони и още една

  2. за какво е oci_bind_by_name?

  3. Oracle UTL_FILE чете CSV файлови редове

  4. Сортиране на записи от Oracle с множество десетични точки (.)

  5. Как да добавите коментари към таблица в Oracle SQL Developer?