sql >> データベース >  >> RDS >> Oracle

OracleUTL_FILEはCSVファイル行を読み取ります

    これを行う方法を示す例を次に示します。ディレクトリとファイル名が異なるため、私のコードはあなたのコードとは少し異なります。

    ファイルに保存されたデータを含むサンプルテーブル:

    SQL> create table test2 (id number, fname varchar2(20), lname varchar2(20));
    
    Table created.
    

    コード;興味深い部分は14行目で、行全体を個別の値に分割する方法です。

    SQL> declare
      2    l_file         utl_file.file_type;
      3    l_text         varchar2(32767);
      4    l_cnt          number;
      5  begin
      6    -- Open file.
      7    l_file := utl_file.fopen('EXT_DIR', 'test2.txt', 'R', 32767);
      8
      9    loop
     10      utl_file.get_line(l_file, l_text, 32767);
     11
     12      -- L_TEXT contains the whole row; split it (by commas) into 3 values
     13      -- and insert them into the TEST2 table
     14      insert into test2 (id, fname, lname)
     15        values (regexp_substr(l_text, '[^,]+', 1, 1),
     16                regexp_substr(l_text, '[^,]+', 1, 2),
     17                regexp_substr(l_text, '[^,]+', 1, 3)
     18               );
     19    end loop;
     20
     21    utl_file.fclose(l_file);
     22  exception
     23    when no_data_found then
     24      null;
     25  end;
     26  /
    
    PL/SQL procedure successfully completed.
    

    結果:

    SQL> select * from test2;
    
            ID FNAME                LNAME
    ---------- -------------------- --------------------
           100 Steven               King
           101 Neena                Kochha
           102 Lex                  De Haan
           103 Alexander
           104 Bruce                Ernst
    
    SQL>
    


    1. SQL Serverでクエリ結果をコンマ区切りリストとして返す方法– STRING_AGG()

    2. SQLServerで制約のある列を削除する方法

    3. SQLite内部結合

    4. PostgreSQL 9.3:動的ピボットテーブル