sqlplusの出力を1行で表示する方法は?


47

100列のテーブルがあります。SQL Plus出力ラップでデータを選択すると、読みにくくなります。

私が望むのは、水平スクロールバーを表示するか、何らかの方法で出力を送信することです less

私はSQLPlusで次のステートメントを実行します-

SET LINESIZE 32000;
SET PAGESIZE 40000;
SET LONG 50000;
SPOOL output.txt
SELECT * FROM big_table;

それからbash私は走る-

less output.txt

出力はラップされたままで、読み取り不能です。


1
また、各列のサイズを個別に設定する代わりに、列を自動拡張したいです。
Kshitizシャルマ

回答:


58

行を折り返さないようにsqlplusを強制するだけでは十分ではありません。また、行を折り返さないようにスプールファイルを表示するために使用することをビューアに伝える必要があります。あなたの視聴者がある場合はless、その後-Sオプションで、あなたはに応じて使用する必要があります https://superuser.com/questions/272818/how-to-turn-off-word-wrap-in-less。Unix / Linuxではhead -1 output.txt、ファイルの最初の行を取得するために使用できるため、これが期待どおりかどうかを確認するかod -c output.txt|head 、出力ファイルの実際の改行位置を確認するために使用できます。

LONG列を表示し、それらの値に改行が含まれる場合、これらの列の値に対して複数の行が出力され、sqlplus設定でこれを無効にすることはできません。


次のsqlplusコマンドが役立つ場合があります。

  • SET LINESIZE linesize線の長さ。ほとんどの場合の最大値は、linesizeあなたは無効な値にLINESIZEを設定した場合、あなたの最大値を見つけると、エラーメッセージを確認することができますので、32767でSET LINESIZE 0与える可能性がありSP2-0267: linesize option 0 out of range (1 through 32767) (1)
  • SET TRIMSPOOL ON そうでない場合、スプールファイルのすべての行は、行サイズに達するまで空白で埋められます。
  • SET TRIMOUT ON それ以外の場合、出力のすべての行は、行サイズに達するまで空白で埋められます。
  • SET WRAP OFFLINESIZEより長い場合、行を切り捨てます。これは、行サイズが十分に大きい場合は発生しません。
  • SET TERMOUT OFF結果の出力への出力を抑制します。行は引き続きスプールファイルに書き込まれます。これにより、ステートメントの実行時間が大幅に短縮される場合があります。
  • SET PAGESIZE 0 無限のページサイズを設定し、見出し、タイトルなどを避けるため。
  • SET出力(NUMWIDTH、NUMFORMAT、LONG、COLSEP)およびパフォーマンス(ARRAYSIZE、LONGCHUNKSIZE)に関するその他のパラメーターがいくつかあります。

COLUMN個々の列をフォーマットするには、コマンドを使用する必要があります。

たとえば、出力内column name format a30の列nameを最大長30文字にフォーマットします。

表示サイズを固定したくないが、行の列の実際の値のサイズと同じにする必要がある場合、私が知っている唯一の方法は、ステートメントのselect句を変更して目的の結果を取得し、使用することです文字列連結演算子||、例えば

select emp_id||' '||first_name||' '||last_name
from emp;

すべての変数の詳細な説明は、SQL * Plus User's Guide and Referenceにあります。

いくつかの設定(またはCOLUMN定義)を再利用する場合は、それらをファイルに保存し、再度必要になったときにこのファイルを実行できます。sqlplusを起動すると、このファイルを自動的に実行することもできます。

(1)「LINESIZEの最大値を見つける方法(システムに依存)(Doc ID 1547262.1)」


LONGCHUNKSIZEパフォーマンスについてだけではない、望ましくない行の折り返しを避けるために必要であると思わほかにまでLINESIZEだけから使用できなく出力でこれを実験し、DBMS_METADATA.get_ddl()
ダニエル・ベリテ

2
ニースの答えは...
ypercubeᵀᴹ

2
@YperSillyCubeᵀᴹが言ったこと:)
トムV

あなたは使用する必要がありますSET PAGESIZE 1000代わりに 0`「SELECTコマンド発行時に列ヘッダが印刷されませんそれ以外の場合は。参考
ピエール・C

@PierreCですから、「無限のページサイズを設定し、見出しやタイトルなどを避けるために、SET PAGESIZE 0」と書きました。
miracle173


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.