Oracle
 sql >> Base de données >  >> RDS >> Oracle

Liste délimitée par des virgules PL/SQL ; supprimer les doublons et mettre dans le tableau

Il existe une astuce SQL bien connue pour transformer des listes séparées par des virgules en lignes. Utilisez simplement cette astuce, ajoutez un DISTINCT mot-clé, et BULK COLLECT les résultats dans votre tableau (je suppose que vous voulez dire 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;

Sortie :

l_array.count = 4
l_array(2) = B