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

Oracle PL / SQL:データを表からCSVにエクスポート

    UTL_FILEの使用方法を学ぶ 表からOraclePL/SQLのCSVファイルにデータをエクスポートするパッケージ。

    Oracleでは、パッケージUTL_FILE テキストファイルを書き込むための多くの手順と関数が含まれています。以下は、構文の詳細とファイルを作成するために必要な手順です。

    UTL_FILEを使用してファイルを書き込むための構文と手順

    -- Declare a variable to store file type
    n_file UTL_FILE.FILE_TYPE;
    -- Open the file in Begin section, it will open the file and return the file handle into the variable n_file
    n_file := UTL_FILE.FOPEN('DIR_OBJ', 'YourCSVFileName.csv', 'w', 4000);
    -- Write a single or multiple lines
    UTL_FILE.PUT_LINE(n_file, 'abc, xyz, xxx');
    -- Close the file
    UTL_FILE.FCLOSE(n_file);
    を閉じます

    基本的な例

    Declare
       n_file Utl_File.File_Type;
    Begin
       -- The directory object MY_DIR must be exist or create a new one
       n_file := Utl_File.Fopen('MY_DIR', 'myfile.csv', 'w', '4000');
    
       Utl_File.Put_Line(n_file, 'First line.');
       Utl_File.Put_Line(n_file, 'Second line.');
       Utl_File.Put_Line(n_file, 'Third line.');
    
       Utl_File.Fclose(n_file);
    End;

    上記の例で述べたように、ディレクトリオブジェクトMY_DIR 存在する必要があります。 Oracleのディレクトリオブジェクトは、サーバー上の物理ディレクトリへの参照です。以下は、Oracleでディレクトリオブジェクトを作成する例です。

    -- Windows example
    CREATE OR REPLACE DIRECTORY CSVDIR AS 'd:\oracle\csvfiles';
    -- Linux example
    CREATE OR REPLACE DIRECTORY CSVDIR AS '/usr1/oracle/csvfiles';

    Oracleのディレクトリオブジェクトの詳細については、このリンクを確認してください。

    Oracleの例でテーブルからCSVにデータをエクスポートする

    以下は、EMPテーブルからCSVファイルにデータをエクスポートするOracleのストアドプロシージャの例です。

    Create Or Replace Procedure exp_emp_data Is
    
        n_file     utl_file.file_type;
        v_string   Varchar2(4000);
       
      -- get the data using cursor 
      Cursor c_emp Is
        Select
            empno,
            ename,
            deptno,
            sal,
            comm
        From
            emp;
    
    Begin
        n_file := utl_file.fopen('CSVDIR', 'empdata.csv', 'w', 4000);
    
    -- if you do not want heading then remove below two lines
        v_string := 'Emp Code, Emp Name, Dept, Salary, Commission';
        utl_file.put_line(n_file, v_string);
        
        -- open the cursor and concatenate fields using comma
        For cur In c_emp Loop
            v_string := cur.empno
                        || ','
                        || cur.ename
                        || ','
                        || cur.deptno
                        || ','
                        || cur.sal
                        || ','
                        || cur.comm;
            
            -- write each row
            utl_file.put_line(n_file, v_string);
        End Loop;
        
        -- close the file
        utl_file.fclose(n_file);
    Exception
        When Others Then
            -- on error, close the file if open
            If utl_file.is_open(n_file) Then
                utl_file.fclose(n_file);
            End If;
    End;

    これでストアドプロシージャが作成されました。それを実行してデータをエクスポートします。

    Begin
        exp_emp_data;
    End;

    関連チュートリアル:

    • ユーティリティ:テーブルからデータをエクスポートするためのPL/SQLプロシージャを生成する
    1. ヘアサロンデータベースプロジェクト

    2. RailsコンソールはIDの配列でユーザーを検索します

    3. SQLの文字列で最初に出現する部分文字列を置き換えます

    4. ステートメントのトリガー内でステートメントの影響を受ける行数を取得する方法