100列のテーブルがあります。 SQL Plus
でデータを選択すると、出力が折り返され、読みにくくなります。
私が望むのは、水平スクロールバーを表示するか、何とか出力をless
に送信することです。
SQLPlusで次のステートメントを実行します-
SET LINESIZE 32000;
SET PAGESIZE 40000;
SET LONG 50000;
SPOOL output.txt
SELECT * FROM big_table;
次にbash
で実行します-
output.txtを減らす
出力はまだラップされており、読み取れません。
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 0
がSP2-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
は、ページサイズを無限に設定し、見出し、タイトルなどを回避します。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)」
以下を設定する必要があります:
SET WRAP OFF
このように設定できます
SET WRAP OFF
SET PAGESIZE 0