sql >> Database >  >> RDS >> Oracle

PL/SQL door komma's gescheiden lijst; verwijder dups en plaats in array

Er is een bekende SQL-truc om door komma's gescheiden lijsten om te zetten in rijen. Gebruik die truc, voeg een DISTINCT toe zoekwoord, en BULK COLLECT de resultaten in je array (ik neem aan dat je verzameling bedoelt).

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;

Uitgang:

l_array.count = 4
l_array(2) = B


  1. Selecteer * uit tabel waarbij datum =vandaag

  2. Afstand tussen 2 PUNTEN in Postgis in srid 4326 in meter

  3. Alle triggers in de SQL Server-database uitschakelen?

  4. Symfony en Doctrine maken migratie zonder effect