[Oracle19c]便利!SET LINESIZEの新オプション【SET LINESIZE WINDOW】
Oracle 18cよりSET LINSIZEパラメータにWINDOW オプションが追加されました。
実行方法:
SQL> SET LINESIZE WINDOW
上記の通り設定することでLINESIZEをターミナルのサイズに自動で合わせてくれるようになります。
しかもターミナルサイズの変更に追従してくれます。
そのため常にターミナルの表示幅を最大限利用したSQLの結果表示ができるようになりました。
![](https://www.fuku.tokyo/wp-content/uploads/2020/05/linsize-min.gif)
そもそも:
LINESIZEはSQL*Plusのシステム変数の一つで、「1行に表示する文字の合計数」を設定するパラメータです。
SQLの結果列( + 列間文字)の文字の合計数が、このLINESIZE をオーバーしてしまった場合、その列以降は行が折り返されてしまい、非常に見づらい状態で表示されてしまいます。
これはターミナルの横幅を大きくしたところで変わりません。
このLINESIZE のデフォルト値は80ですが、現在の作業環境においてこの値はかなり小さい値となっており、ログイン時やSQLを流すタイミングで大きい値に変更するというのが通例です。
また作業によりターミナルのサイズは割とよく変更するため、ターミナルの横幅より余分を持たせた大きい値を指定するというのが一般的なのではと思います。
しかし、大きくしておけば全く問題ないというわけではなく、
ターミナルサイズ以上にLINESIZEを大きくした場合、DESCRIBEコマンドの出力表示が崩れてしまう という弊害があります。
表示が崩れてしまった例(SET LINESIZE 200 > ターミナルのサイズ幅 100):
![](https://www.fuku.tokyo/wp-content/uploads/2020/05/image-1.png)
このようにDESCRIBEコマンドはLINESIZE に合わせ列幅が最適化されるため、
ターミナルサイズ以上にLINESIZEを大きくした場合、表示が崩れてしまいます。
DESCRIBEコマンドは簡単にテーブルの列定義を確認できるため、多用するコマンドですが、
DESCRIBEコマンドを打つたびにLINESIZEの値を戻すという面倒な作業がいままでは避けられませんでした。
SET LINESIZE WINDOWで解決
上記問題もSET LINESIZE WINDOWを設定することで起こらなくなります。
LINESIZEをターミナルのサイズに自動で合わせてくれるため、以下の通り表示崩れが起こらなくなります。
もちろん通常のSQLもターミナルの表示幅を最大限に生かして表示されます。
![](https://www.fuku.tokyo/wp-content/uploads/2020/05/image-2.png)
そんなわけで…
ターミナル幅を超える列幅で出力したい場合(SPOOLで結果をファイル出力する等)など、全ての用途で最適というわけではないですが、基本的な運用オペレーションではSET LINESIZE WINDOWを設定しておけば問題ないかと思います。
注意点 :SET LINESIZE WINDOWを設定した場合、LINESIZEと合わせてPAGESIZEもコンソールの高さに合わせて自動調整されてしまうようです。この状態でSET PAGESIZE 2000など固定化しようとしても反映されません。使用する場合はその点頭に入れておく必要があります。
※ちなみにSQL*Plusの機能であるため、接続先のOracle Server のバージョンではなく、使用しているSQL*Plus(Oracle Clinetのバージョン)が18c以上でないと使用できません。