Oracle

OracleからSPOOLを使いCSV/TSV出力する際のシステム変数設定例

Buy Me A CoffeeBuy Me a Coffee at ko-fi.com

Abstract

OracleからSELECT結果をCSVやTSVで出力したいことがよくあります。しかし変数を適切に設定しないと、不要な情報がファイルに出力されてしまったり、行が予期せず折り返されたりして困ることがよくあります。Oracle DBからSQLのSELECT結果をCSVやTSVで出力する方法を以下に紹介します。

達人に学ぶDB設計徹底指南書 初級者で終わりたくないあなたへ [ ミック ]

Oracle DBからSQLのSELECT結果をCSVやTSVで出力する方法

-- データベースから一度にフェッチする配列の大きさ (デフォルト値 : 15) 
SET ARRAY 512

-- スクリプトのSQL*Plusコマンドを表示をする/しない
SET ECHO OFF

-- 問い合わせの結果のレコード件数を表示しない
SET FEED OFF

-- 出力をユーザーの表示デバイスに表示しない
SET FLU OFF

-- 列ヘッダを表示しない
SET HEAD OFF

-- 行に表示するバイト数の設定
SET LIN 32767

-- 1ページの行数
SET PAGESIZE 0

-- 結果セットのプリフェッチ行数の設定 (デフォルト値 : 1)
SET ROWPREFETCH 8

-- ステートメントキャッシュ (再パースの回避) 数の設定
SET STATEMENTCACHE 64

-- 実行するスクリプトのコマンドによって生成される出力を表示しない
SET TERM OFF

-- SQL実行時間を表示しない
SET TIMI OFF

-- 各行の出力の終わりから行末までの空白を出力しない (トリムする)
SET TRIMS ON

-- 置換変数に設定する前後の状態を表示
SET VERIFY OFF

-- spool開始 & 出力先ファイル指定
SPO /home/Apple/macOS.csv

-- CSV形式でSELECTするSQL
SELECT VERSION||','||NAME||','||DEV_CODE||','||RELEASE_DATE FROM MACOS;
-- TSV形式でSELECTするSQL
SELECT VERSION||CHR(9)||NAME||CHR(9)||DEV_CODE||CHR(9)||RELEASE_DATE FROM MACOS;

-- SPOOL終了😸
SPO OFF

SPOOL SQLの実行例

上記のSQLファイルをsql plusでログインし実行すればSPOOLファイルが出力されます。

/home/user1/spool.sql