45
48

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SELECT文の検索結果をCSVへ出力するSQL(Oracle)

Last updated at Posted at 2018-03-27

はじめに

システムに不具合が発生し、データに問題があることまで調査できたとします。
そのとき、手っ取り早くDBの中身をCSVで出力して確認したいとき、ありませんか?
私はありました。

OracleにはSQLの実行結果をファイルに出力する SPOOL コマンドが用意されているので、それを応用してCSVへ出力するSQLを実装しました。
調査の際などにご活用ください。

環境

  • DB:Oracle Database 10g Release 10.2.0.5.0 - 64bit Production

CSV出力SQL

output_csv.sql
-- 検索結果をCSVへ出力する

-- ①SQL設定
-- コンソールメッセージを非表示にする
SET ECHO OFF
-- 1行に出力するバイト数
-- 少ないと見切れるので最大に設定する
SET LINESIZE 32767
-- 1ページの行数
-- 少ないとヘッダーが多くて見づらいので無制限に設定する
SET PAGESIZE 0
-- 「○○行が選択されました」メッセージを非表示にする
SET FEEDBACK OFF
-- 区切り文字をカンマに指定する
SET COLSEP ','
-- 各行の右端にあるスペースを削除する
SET TRIMSPOOL ON

-- ②出力開始
-- 出力パスは適宜変更する
SPOOL C:\output.csv

-- ③出力内容
-- 検索文は適宜変更する
SELECT *
  FROM {テーブル名}
;

-- ④出力終了
SPOOL OFF

追記

コメントを頂いて気づいたのですが、この方法だと固定長となり、各列の右にスペースが含まれてしまいます。

CSV出力したデータを目視以外で使うなど、可変長で取得したい場合は、列をカンマで結合して1つの列として検索するしかなさそうです。

SELECT {1} || ',' ||
       {2} || ',' ||
       {3}
  FROM {テーブル名}
;

参考リンク

45
48
2

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
45
48

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?