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. PostgreSQL8.2でブロックを実行できません

    2. PG ::ConnectionBad(致命的:pg_hba.confはホスト172.17.0.1、ユーザーXXX、データベースXXX、SSLオフの接続を拒否します):

    3. SQLを使用してデータベーステーブルを作成する方法

    4. 4 PL/SQL匿名ブロックの例