sql >> Databáze >  >> RDS >> Oracle

PL/SQL seznam oddělený čárkami; odstranit dupy a dát do pole

Existuje známý SQL trik pro přeměnu seznamů oddělených čárkami na řádky. Stačí použít tento trik, přidat DISTINCT klíčové slovo a BULK COLLECT výsledky do vašeho pole (předpokládám, že máte na mysli kolekci).

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;

Výstup:

l_array.count = 4
l_array(2) = B


  1. mysql_fetch_array přidat všechny řádky?

  2. Problémy CloudSQL PDO (unix_socket) na Google App Engine

  3. Nastavte back-end MySQL v Azure pro Xamarin Offline Sync

  4. K nahrazení cizích klíčů použijte spouštěče na zděděných tabulkách