LoginSignup
0
0

Oracleデータを繰り返しCSV出力するためのバッチについて

Posted at

はじめに

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レコードを引用符、カンマで結合した結果を出力するだけですが、あれば何かと
便利です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0