はじめに
Oracleデータベースを使用したシステムを運用していると、データをCSV形式で出力する
機会は多いですが、繰り返し同じ作業が必要となる場合があります。
毎回ツールを起動、SELECT文を実行、実行結果をコピー&ペースト/ファイル出力 で取得
でも良いのですが、手間だと感じる場合や、誰がやっても同じ結果となることを期待する
場合には、何かしらの方法/手順 を確立しておきたいです。
方法はいくらでもあるかと思いますが、そのうちの1つをまとめてみます。
※Windows環境での話
やりたいこと/制限事項
- OracleデータベースのデータをCSV形式でファイル出力
- 何度でも繰り返し、誰でも簡単に実行できる
- Windows環境
方法(具体的な手順)
Windowsバッチを実行、SQLPLUS経由でSELECT文を実行し、結果をファイル出力。
1.Windowsバッチ (output_csv.bat)
記載例 (output_csv.bat)
SQLPLUS [oracle_user]/[oracle_pass]@[server_name] @select.sql
- oracle_user - Oracle接続ユーザ名
- oracle_pass - Oracle接続ユーザのパスワード
- server_name - Oracleデータベース名(IPアドレスも可)
- select.sql - SELECT文等を記載するスクリプトファイル名
2.SELECT文発行スクリプト (select.sql)
記載例 (select.sql)
set echo off
set linesize 1024
set pagesize 0
set trimspool on
set feedback off
spool output.csv
SELECT
'"カラム1","カラム2","カラム3","カラム4","カラム5"' FROM DUAL;
SELECT
'"' || trim(COLUMN1) || '"' || ',' ||
'"' || trim(COLUMN2) || '"' || ',' ||
'"' || trim(COLUMN3) || '"' || ',' ||
'"' || trim(COLUMN4) || '"' || ',' ||
'"' || trim(COLUMN5) || '"' AS "CSVデータ"
FROM
[テーブル名]
ORDER BY
COLUMN1,
COLUMN2
;
spool off
exit
- spool - 出力ファイル名 (上記例では output.csv といったファイル名を指定)
- CSVの引用符 - '"' としている箇所で指定 (上記例ではダブルクォーテーションを指定)
3.出力結果 (output.csv)
テーブル構造を把握するためのカラム名がヘッダ行として1行目に出力され、2行目以降に
データが出力されます。
出力結果例 (output.csv)
"カラム1","カラム2","カラム3","カラム4","カラム5"
"COLUMN1_DATA1","COLUMN2_DATA1","COLUMN3_DATA1","COLUMN4_DATA1","COLUMN5_DATA1"
"COLUMN1_DATA2","COLUMN2_DATA2","COLUMN3_DATA2","COLUMN4_DATA2","COLUMN5_DATA2"
"COLUMN1_DATA3","COLUMN2_DATA3","COLUMN3_DATA3","COLUMN4_DATA3","COLUMN5_DATA3"
最後に
テーブルの1レコードを引用符、カンマで結合した結果を出力するだけですが、あれば何かと
便利です。