[Oracle]SQL*Plus 基本のシステム変数

IT関連

例えば、sqlplusでselect文を流した時、返ってきたレコードの文字数(バイト)が長いと自動改行表され、変なところで文字切れ(改行)を起こすことがあります。

それを防いだりするために実行するコマンドを「システム変数」といいます。
新人の時に先輩から「おまじないだよ」と教えてもらって、呼び方が可愛かったのでそう呼んでいます。基本はググればすぐにわかりますが、自分用にもよく使うものをメモしたかったので記事にしておきます。

超基本のおまじない

①1行あたりの表示バイト数指定
–行の幅を設定する
–デフォルト80

set linesize 1000

デフォルト80になっているので、返ってくる項目数が多いと必ず使います。
抽出データによって、だいたい300、500あたりセットしてるけど、項目数多かったりそこそこ長い
VARCHAR2項目があるなど、想定できない時はMAXにしちゃう時もあります。

②各項目の前後空白の削除
–各行の出力の終わりから行末までの空白を出力するかしないか 
–デフォルトはOFF

set trimspool on

set linesすると設定したバイト数に満たない場合、不足分のブランクが末尾に入るので「set trimspool on」もセットで使用が必要です。
項目の最後尾のデータがブランクとか、末尾にブランクあるとか、扱うデータによっては危ないかもしれないので確認必須です。

③1回あたりの表示行数指定
–デフォルト14
set pages 1000

1回で表示される行数もデフォルト14になってるので、ページ変わるたび先頭にカラム名が表示されます。
行数が多いレコード抽出する時は想定に合わせて、表示行数も上記コマンドで増やしてたりします。

④項目をカンマ区切りで出力
–区切り文字の設定
–デフォルトはスペース

set colsep ‘,’

あとはこのように抽出データの区切位置をわかりやすくしたり、エクセルなどの表に貼り付けやすくするため「set colsep」を使ったりすることもあります。
上の例だと「,」で区切れます。

超基本のおまじない まとめ

set lines 10000 /* 1行あたりの表示バイト数指定(文字が切れる) */
set trimspool on /* トリム(set linesとセット) */
set pages 10000 /* 1回あたりの表示行数指定 */
set colsep ‘,’ /* 項目ごとにカンマ区切りで表示 */

その他のおまじない

主にCSV出力したい時のシステム変数です。

①最大桁数の指
–溢れたら「###」になる
set numwidth 15

②処理時間を表示
–デフォルトはOFF
set timing on

③ログを出力する
–任意のフォルダにファイルを作成し、ログを出力
–logかcsvかは拡張子で指定可
–XXXXは任意のフォルダパス

spool XXXX\output.csv

–ログ出力の終了
spool off

.logでもいいし、.csvとかにもできます。

④実行したコマンド(およびプロンプト)を画面に表示
–デフォルトはOFF
set echo on;

「@」を使ったスクリプト実行、実行計画の取得などはまた別で書きます。

⑤ヘッダのデータ列にある「—」を消したい時
–短縮系はset head off
set heading off

⑥ヘッダーやタイトルをすべて非表示にしたい
–set pages 0 と同じ
set pagesize 0

PAGESIZE の 0 は特別な値でページヘッダー、列ヘッダー、ページブレーク、タイトル、初期空白行(NEWPAGE) などをすべて非表示にすることができます。

⑦実行したスクリプトの結果を画面に表示しない
–短縮系はset term off
set termout off

⑧「○行が選択されました。」などのメッセージを表示しない
set feedback off

まとめ

コマンドや関数って調べてる時は便利だな!ってなるんですが、こういうのは実際に使ってみないと覚えませんね(笑)

コメント

タイトルとURLをコピーしました