Oracle select結果をcsvに出力
こんばんは、Nです。
(こういったNoteを書くとき、記事のタイトルの横にユーザ名は表示されるので冒頭の自己紹介は必要ない気もしつつ、なんだかんだ最初に無意識に書いてしまうな…と、この記事を書きながら思いました。以上、余談です。)
少し前に書いたOracle関連の備忘録、別編です。
今回の内容
Oracle周りを用いたシステムを使っている際、システムに不具合があったりとデータに問題があることが調査で発覚したとします。そんなときにDBの内容を逐一確認していきますが、その内容をCSVファイルに出力して内容を確認したいな、といったシーンに出会いました。今回はそんなときの方法について。
Oracle Spool機能
OracleにはSQLの実行結果をファイルに出力するSPOOLコマンドが用意されています。今回はこれを応用し、CSVファイルにSELECT実行結果を出力するSQLを実装しました。
CSV出力構文
TITLE:csvout.sql
- select実行結果をCSVへ出力する
-- ①SQL設定
-- コンソールメッセージを非表示にする
SET ECHO OFF
-- 1行に出力するバイト数、少ないと見切れるため一定数を入力
SET LINESIZE 1000
-- 1ページの行数、少ないと見づらいため無制限に設定する
SET PAGESIZE 0
-- 「○○行が選択されました」メッセージを非表示にする
SET FEEDBACK OFF
-- 区切り文字をカンマに指定する
SET COLSEP ','
-- ②出力
-- 出力場所・パスを希望の場所に定義する
SPOOL C:\output.csv
-- ③出力内容
-- 以下SQL実行結果
SELECT *
FROM TABLE(*);
-- ④出力終了
SPOOL OFF
といった形です。こちらコピペで使いまわせるので、お困りの方は是非ご使用ください。(以下リンクを参考に、というかかなり似ていますがしておりますのでこちらもご参考までに。)
最後に
CSVファイルにしてエクセル側で見ていく、といった操作が結局わかりやすかったりするシーンも多いため解決方法の場合分けとして今回の内容はとても有用なものだと感じました。
DB周りはいじっていて楽しさもあります。今後も有用なものがあれば共有していきますので引き続きよろしくお願いします。ではまた。
N
私の常日頃の生活をベースに、皆さんの役に立てたり、探しているものを紹介できたらと思っています。今後もよろしくお願いします!