web-dev-qa-db-ja.com

すべての列のOracle列幅

たとえば、さまざまな列を表示するための長いステートメントを実行するときの問題の1つ

 select g.guestid, g.forename, g.surname, b.bookingid,
 b.arrivedate, b.departdate, br.floorno, br.roomno from...

linuxターミナルでの列のサイズ設定が問題のようです。たとえば、Forename VarChar(80)列は、上記のステートメントを実行するときに画面の幅の大部分を占め、それを削減する1つの方法は次のとおりです。

SET COLUMN FORENAME FORMAT A10

例えば。ただし、多くの列はこれを繰り返し実行する必要があり、これは非常に長いものです。つまり.

SET COLUMN FORENAME FORMAT A10
SET COLUMN SURNAME FORMAT A10

等々...

すべてがうまく収まるように、テキストの幅に応じて列の幅を調整すると言う方法はありますか?そして、これは好きではありません。

enter image description here

FUNCTIONSを使用しないソリューションをお勧めします。

8
MooHa

いいえ、SQL * Plusの列幅をテキスト幅に「自動調整」する簡単な方法はありません。

ただし、スクリプトを使用すると、作業が楽になります。

まず、タイピングを減らします。 SET COLUMN FORENAME FORMAT A10を実行せず、代わりに@c forename 10のようなことを実行してください。

17:33:31 SYSTEM@dwal> cl col
columns cleared
17:33:33 SYSTEM@dwal> select * from dual;

D
-
X

Elapsed: 00:00:00.01
17:33:37 SYSTEM@dwal> @c dummy 10
17:33:43 SYSTEM@dwal> select * from dual;

DUMMY
----------
X

Elapsed: 00:00:00.01
17:33:45 SYSTEM@dwal> get s:\c.sql
  1* col &1. for a&2.
17:33:50 SYSTEM@dwal>

または、次のように幅の広い列をすばやく非表示にします。

17:48:44 SYSTEM@dwal> select owner, table_name from all_tables where rownum = 1;

OWNER                          TABLE_NAME
------------------------------ ------------------------------
SYS                            CON$

Elapsed: 00:00:00.24
17:48:49 SYSTEM@dwal> @np owner
17:48:53 SYSTEM@dwal> select owner, table_name from all_tables where rownum = 1;

TABLE_NAME
------------------------------
CON$

Elapsed: 00:00:00.26
17:48:56 SYSTEM@dwal> get s:\np
  1  col &1 noprint
  2* @undef

これらは、私が日常的に使用している多くのスクリプトのうちの2つにすぎません。このアプローチは、それに慣れて効果的にするために、カスタマイズに時間と個人的な注意を払う必要がありますが、押すキーの量を劇的に減らします。

次に、glogin.sqlがあります。どこかに接続するたびに実行されるスクリプトです。行を折り返す「長い」列のリストを知っていると思います。

そこにそれらをリストするだけで、

SET COLUMN FORENAME FORMAT A10
SET COLUMN SURNAME FORMAT A10

列パラメーターは、(再)接続するたびに設定されます。

1
be here now

他のユーザーがすでに述べたように、sqlplusの簡単な解決策はありません。 glogin.sqlまたはlogin.sqlファイルを使用すると役立つ場合があります(@RenéNyffeneggerが提供した これらのファイルに関する記事 )。これらのファイルに列定義を入れることができます。常に同じクエリをクエリする場合、または列の名前に一貫性がある場合は、これが役立つ場合があります。

または、呼び出し元のスクリプトに列ステートメントを配置します

@scriptname.sql

列形式を使用する場合。スクリプトを SQLPATH variable の一部であるディレクトリに配置して、任意のディレクトリから呼び出すことができるようにします。

または、別のツールを使用します。あるユーザーはすでに SQLcl を指しています。

0
miracle173

Tom Kyteは、結果セットを垂直方向に表示する print_tableprocedure を作成しました。

例えば:

SQL> exec print_table('select g.guestid, g.forename, ... from ...')
GUESTID                       : 210
FORENAME                      : DINGLE
...
etc...
....
-----------------

PL/SQL procedure successfully completed.

この手順は、結果セットが小さく、理想的には10行以下の場合に特に便利です。

0