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

SQLcl(Oracle)でクエリ結果をCSVファイルにエクスポートする方法

    SQLclを使用してOracleDatabaseに対してクエリを実行している場合は、SPOOLを使用できます。 クエリ結果をCSVファイルにエクスポートするコマンド。

    テーブル全体をエクスポートする例を次に示します。

    SET SQLFORMAT csv
    SPOOL '/Users/barney/data/countries.csv';
    SELECT * FROM countries;
    SPOOL off;
    SET SQLFORMAT ansiconsole

    行ごとに次のようになりました:

    1. 最初の行でSQLFORMATを設定します csvへ 。これにより、出力が実際にコンマで区切られるようになります。これを行わないと、.csvのファイルになってしまう可能性があります 拡張機能ですが、カンマで区切られていないコンテンツを使用します。
    2. 2行目は、SPOOLを使用する場所です。 出力ファイルが書き込まれる場所を指定するコマンド。必ず/Users/barney/data/countries.csvを変更してください システム上の場所の一部です。
    3. 3行目で、SQLクエリを実行しました。これはエクスポートする結果です。この場合、countries全体をエクスポートしました テーブル。
    4. 次に、SPOOLをオンにしました オフ。
    5. 最後に、SQLFORMATを設定して終了しました。 ansiconsoleに戻る (これは、csvに設定する前に使用していたものです。 。

    結果のファイルは次のようになります。

    "COUNTRY_ID","COUNTRY_NAME","REGION_ID"
    "AR","Argentina",2
    "AU","Australia",3
    "BE","Belgium",1
    "BR","Brazil",2
    "CA","Canada",2
    "CH","Switzerland",1
    "CN","China",3
    "DE","Germany",1
    "DK","Denmark",1
    "EG","Egypt",4
    "FR","France",1
    "HK","HongKong",3
    "IL","Israel",4
    "IN","India",3
    "IT","Italy",1
    "JP","Japan",3
    "KW","Kuwait",4
    "MX","Mexico",2
    "NG","Nigeria",4
    "NL","Netherlands",1
    "SG","Singapore",3
    "UK","United Kingdom",1
    "US","United States of America",2
    "ZM","Zambia",4
    "ZW","Zimbabwe",4
    
    25 rows selected. 
    
    

    列ヘッダーの削除

    SET HEADING offを使用して列ヘッダーを削除できます :

    SET SQLFORMAT csv
    SET HEADING off
    SPOOL '/Users/barney/data/countries.csv';
    SELECT * FROM countries;
    SPOOL off;
    SET SQLFORMAT ansiconsole
    SET HEADING on

    結果:

    "AR","Argentina",2
    "AU","Australia",3
    "BE","Belgium",1
    "BR","Brazil",2
    "CA","Canada",2
    "CH","Switzerland",1
    "CN","China",3
    "DE","Germany",1
    "DK","Denmark",1
    "EG","Egypt",4
    "FR","France",1
    "HK","HongKong",3
    "IL","Israel",4
    "IN","India",3
    "IT","Italy",1
    "JP","Japan",3
    "KW","Kuwait",4
    "MX","Mexico",2
    "NG","Nigeria",4
    "NL","Netherlands",1
    "SG","Singapore",3
    "UK","United Kingdom",1
    "US","United States of America",2
    "ZM","Zambia",4
    "ZW","Zimbabwe",4
    
    25 rows selected. 
    
    

    この場合、私はHEADINGSを回しました ファイルをエクスポートした後、元に戻します。

    フィードバックを削除

    X rows selected SET FEEDBACK offを使用 :

    SET SQLFORMAT csv
    SET HEADING off
    SET FEEDBACK off
    SPOOL '/Users/barney/data/countries.csv';
    SELECT * FROM countries;
    SPOOL off;
    SET SQLFORMAT ansiconsole
    SET HEADING on 
    SET FEEDBACK on

    結果:

    "AR","Argentina",2
    "AU","Australia",3
    "BE","Belgium",1
    "BR","Brazil",2
    "CA","Canada",2
    "CH","Switzerland",1
    "CN","China",3
    "DE","Germany",1
    "DK","Denmark",1
    "EG","Egypt",4
    "FR","France",1
    "HK","HongKong",3
    "IL","Israel",4
    "IN","India",3
    "IT","Italy",1
    "JP","Japan",3
    "KW","Kuwait",4
    "MX","Mexico",2
    "NG","Nigeria",4
    "NL","Netherlands",1
    "SG","Singapore",3
    "UK","United Kingdom",1
    "US","United States of America",2
    "ZM","Zambia",4
    "ZW","Zimbabwe",4
    

    ここで、FEEDBACKをオンにしました ファイルをエクスポートした後、元に戻します。

    複数のテーブル

    この例では、2つのテーブルを結合するもう少し複雑なクエリの結果をエクスポートします。

    SET SQLFORMAT csv 
    SET HEADING off 
    SET FEEDBACK off
    SPOOL '/Users/barney/data/employees_jobs.csv';
    SELECT 
        e.employee_id,
        e.first_name,
        e.last_name,
        e.salary,
        j.job_title
    FROM employees e
    INNER JOIN jobs j
    ON e.job_id = j.job_id
    WHERE e.salary BETWEEN 12000 AND 15000
    ORDER BY SALARY DESC;
    SPOOL off;
    SET SQLFORMAT ansiconsole
    SET HEADING on 
    SET FEEDBACK on

    結果のファイル:

    145,"John","Russell",14000,"Sales Manager"
    146,"Karen","Partners",13500,"Sales Manager"
    201,"Michael","Hartstein",13000,"Marketing Manager"
    147,"Alberto","Errazuriz",12000,"Sales Manager"
    205,"Shelley","Higgins",12000,"Accounting Manager"
    108,"Nancy","Greenberg",12000,"Finance Manager"
    

    結果を追加

    デフォルトでは、SPOOL REPLACEを使用します 、ファイルがすでに存在する場合はファイルを置き換えます。

    ただし、APPENDは使用できます 結果をファイルに追加するための引数。

    SET SQLFORMAT csv 
    SET HEADING off 
    SET FEEDBACK off
    SPOOL '/Users/barney/data/employees_jobs.csv' APPEND;
    SELECT 
        e.employee_id,
        e.first_name,
        e.last_name,
        e.salary,
        j.job_title
    FROM employees e
    INNER JOIN jobs j
    ON e.job_id = j.job_id
    WHERE e.salary BETWEEN 11000 AND 11999
    ORDER BY SALARY DESC;
    SPOOL off;
    SET SQLFORMAT ansiconsole
    SET HEADING on 
    SET FEEDBACK on

    結果のファイル:

    145,"John","Russell",14000,"Sales Manager"
    146,"Karen","Partners",13500,"Sales Manager"
    201,"Michael","Hartstein",13000,"Marketing Manager"
    147,"Alberto","Errazuriz",12000,"Sales Manager"
    205,"Shelley","Higgins",12000,"Accounting Manager"
    108,"Nancy","Greenberg",12000,"Finance Manager"
    168,"Lisa","Ozer",11500,"Sales Representative"
    174,"Ellen","Abel",11000,"Sales Representative"
    114,"Den","Raphaely",11000,"Purchasing Manager"
    148,"Gerald","Cambrault",11000,"Sales Manager"
    

    この例では、前の例で作成(および入力)されたファイルに結果を追加しました。


    1. MicrosoftAccessでレポートヘッダーにロゴを追加する方法

    2. SQLServerで最も近い日付を検索する

    3. ODBCアプリケーションをMySQLに接続する

    4. SQLiteでReplace()がどのように機能するか