2013-03-18 23 views
8

一例のOracle列幅問題の

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

のためのさまざまな列を表示するための長い文を実行するLinuxターミナルの列のサイズが問題のようです。上記のステートメントを実行するとき、例えばForename VARCHAR(80)列は、画面の横幅の大部分を占め、それを削減する一つの方法は、を介してであろう:例えば

SET COLUMN FORENAME FORMAT A10 

。しかし、多くの列はこれを繰り返し通過する必要があり、かなり長くなります。すなわち

SET COLUMN FORENAME FORMAT A10 
SET COLUMN SURNAME FORMAT A10 

のように...

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

enter image description here

を私は関数の使用を伴わない、いくつかのソリューションを好むだろう。

+2

SQLPlusの代わりにGUIツールを使用してみてください。ターミナルウィンドウは、データグリッド表示にはうまくいかない。 –

+0

@EgorSkriptunoff:コマンドライン・クライアントに依存します;)SQL * Plusはこれに関して本当に面倒です。 –

+0

ええ、Sparkのデータフレームは端末で美しく表示されます。 – alexgbelov

答えて

-1

セッションでは、クエリが実行されるまで返される文字列の最大長は何か分かりません。列の大きさは当然適切ですが、実際には80文字のフォアネームのリストを取得することになります。そうでなければデータ型の長さが大きすぎます。

Ericによると、GUIツールは優れており、OracleのSQL Developerは無料であり、優れています。

1

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

ただし、スクリプトを作成することで簡単に作業を進めることができます。

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

17:33:31 [email protected]> cl col 
columns cleared 
17:33:33 [email protected]> select * from dual; 

D 
- 
X 

Elapsed: 00:00:00.01 
17:33:37 [email protected]> @c dummy 10 
17:33:43 [email protected]> select * from dual; 

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

Elapsed: 00:00:00.01 
17:33:45 [email protected]> get s:\c.sql 
    1* col &1. for a&2. 
17:33:50 [email protected]> 

それともすぐにこのような幅の広い列を非表示:

17:48:44 [email protected]> select owner, table_name from all_tables where rownum = 1; 

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

Elapsed: 00:00:00.24 
17:48:49 [email protected]> @np owner 
17:48:53 [email protected]> select owner, table_name from all_tables where rownum = 1; 

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

Elapsed: 00:00:00.26 
17:48:56 [email protected]> get s:\np 
    1 col &1 noprint 
    2* @undef 

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

第2に、glogin.sqlがあります。どこかに接続するたびに実行されるスクリプトです。私はあなたの行をラップさせる "長い"列のリストを知っていると仮定します。

ちょうどそこにそれらをリストアップし、あなたの

SET COLUMN FORENAME FORMAT A10 
SET COLUMN SURNAME FORMAT A10 

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

0

Tom Kyteさんはprint_table procedureと書いてあり、結果セットを縦に表示しています。例えば

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

PL/SQL procedure successfully completed. 

この手順は、結果セットは、理想的には10多分より行小さい場合は特に便利です。

-1

ansiconsoleあなたが探しているものでもよいでしょう。

set sqlformat ansiconsole; 
select g.guestid, g.forename, g.surname, b.bookingid, 
    b.arrivedate, b.departdate, br.floorno, br.roomno from... 

または:

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

この形式の自動サイズの列はクエリ結果のサイズに基づいています。

+0

はsqlplusではなくSQLclです。 – miracle173

0

すでに他のユーザーが述べたように、sqlplusの単純な解決策はありません。おそらく、glogin.sqlまたはlogin.sqlファイル(@RenéNyffeneggerはarticle about those filesを提供しました)を使用することをお勧めします。 これらのファイルに列定義を入れることができます。常に同じクエリをクエリする場合や、列の名前が一貫している場合は、これが役に立ちます。

それとも、あなたが列形式を使用したい場合は、

@scriptname.sql 

で呼び出すスクリプト内の列のステートメントを置きます。スクリプトは、SQLPATH variableの一部であるディレクトリに置いて、任意のディレクトリから呼び出すことができます。

他のツールを使用してください。 1人のユーザーalredyがSQLclを指していました。