みの雑多ブログ

勉強したことをアウトプットしたり、しなかったり

SQL*PLUSでCSV出力をする、一行に表示する情報を多くする

LINUXサーバから、SQL*PLUSを使ってDBに接続してデータを取りたいこともある
GUIに頼らず、コマンドラインでデータを取ってきたいこともある

バージョンによるのかもしれんが、select句にカラム一個一個書いてカンマ区切りで文字列結合する記事が多かった
テストのエビデンスとかじゃ、チョットそれはやってられないので、SPOOLとかで一気に出力したときのメモ

CSV出力

参考
SQL*Plusからのレポートの生成
SQL*Plusコマンド一覧

SQLPLUS -MARKUP CSV ONまたはSET MARKUP CSV ONを使用して、レポートをCSV形式で生成できます。

SET MARKUP CSV ON

HTMLでの出力もできるらしーー

hoge.sql

SET TERMOUT OFF

ALTER SESSION SET NLS_DATE_FORMAT = 'YYYYMMDDHH24MISS';

-- /home/hoge/フォルダ + 上記の形式日付ファイル名に出力される
SPOOL /home/hoge/&_DATE..csv

PROMPT [実行したいSQLのタイトルでもなんでもーー]
[実行したいSQL]

SPOOL OFF

EXIT

あとは、hoge.sqlSQL*PLUSで実行すればOK

チューニング

参考
SQL*Plusのチューニング
SQL*Plusの制限

普通にコマンドラインからSQL*PLUS使ってDB接続したときも、固定長出力で更に制限があって見れたもんじゃない・・
大体は、linesizeやpagesizeを調整するのは基本になりそう

SET LINESIZE 32767
SET PAGESIZE 1000

LINESIZEをできるだけ小さくして、余分なメモリー割当ておよびメモリーのコピーを回避します。

とのことなので、無暗に大きくするのはよくない
上記では、linesizeは一旦最大値を設定

SETシステム変数の一覧

SET MARKUP CSVが有効な場合、次のSETコマンドは出力において有効となりません。

LINESIZEもPAGESIZEも無視されるので、CSV出力するときはいらないーーちなみにね