web-dev-qa-db-ja.com

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

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

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

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

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

次にbashで実行します-

output.txtを減らす

出力はまだラップされており、読み取れません。

51
Kshitiz Sharma

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

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

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

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

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

すべての変数の完全な説明は、 SQL * Plusユーザーガイドおよびリファレンス にあります。

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

(1)「LINESIZE最大値(システムに依存)を見つける方法(ドキュメントID 1547262.1)」

61
miracle173

以下を設定する必要があります:

SET WRAP OFF
6
Balazs Papp

このように設定できます

SET WRAP OFF

SET PAGESIZE 0
2
DevYudh