🖥️

Oracleからspoolを使いCSV出力する時のシステム変数設定例

1 min read

Abstract

Oracleからselect結果をCSVやTSVで出力したいことがよくある。
しかし、システム環境変数を適切に設定しないと、不要な情報がファイルに出力されてしまったり、行が予期せず折り返されたりする。
自分自身の備忘録として、よく使う設定項目を記載する。
(以下には早く出力するためのパフォーマンス設定も含むが設定値は適当である。)

SETシステム環境変数設定例

spool.sql

-- データベースから一度にフェッチする配列の大きさ (デフォルト値 : 15) 
SET ARRAYSIZE 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

Discussion

ログインするとコメントできます