web-dev-qa-db-ja.com

Oracle sqlplusでテーブルデータをより明確に表示する方法

選択した結果のデータを、他のすべての列ではなく、きれいな方法で表示できるようにしたいと思います。

Sqlplusがテーブルデータを表示する方法は次のとおりです。

enter image description here

しかし、私はそれらを次のように見せたいです:

Name   |    Address    |    Phone    |
-------+---------------+-------------+
name1  |    address1   |    phone1   |
name2  |    address2   |    phone2   |
name3  |    address3   |    phone3   |

各列が下にない

25
Nubkadiya

私は通常、次のようなものから始めます:

set lines 256
set trimout on
set tab off

見て help setヘルプ情報がインストールされている場合。その後 select name,address のではなく select *本当にこれらの2つの列だけが必要な場合。

54
Alex Poole

次のように表示したい場合:

WORKPLACEID NAME       ADDRESS        TELEPHONE
----------- ---------- -------------- ---------
          1 HSBC       Nugegoda Road      43434
          2 HNB Bank   Colombo Road      223423

次に、SQL Plusでは、次のように列幅を設定できます(たとえば)。

column name format a10
column address format a20
column telephone format 999999999

必要に応じて、次のように行サイズとページサイズを指定することもできます。

set linesize 100 pagesize 50

これを行うには、クエリを実行する前にこれらのコマンドをSQL Plusに入力します。または、これらのコマンドとクエリをスクリプトファイルに入れることができます。 myscript.sqlを実行します。例えば:

column name format a10
column address format a20
column telephone format 999999999

select name, address, telephone
from mytable;
42
Tony Andrews

ウィンドウの幅に合わせて行サイズを設定し、次のコマンドを使用して折り返しを設定できます。

set linesize 160;
set wrap off;

私の好みに応じて160を使用しましたが、100 - 200および設定ラップはデータではなく、データを適切に表示します。

3
Jagga5589

Sqlplusで作成されたダンプがあり、誰かが以前にこれらの3つの値を設定しなかったために出力が文字化けした場合、解決方法があります。

ほんの2、3時間前に、DB管理者から、sqlplusで実行されたクエリの見苦しい出力が送られてきました(多分、彼は私を嫌っています...)。解決策を見つけなければなりませんでした。これは、出力を解析して少なくとも読みやすくするawkスクリプトです。完全ではありませんが、適切に磨くのに十分な時間がありませんでした。とにかく、それは非常にうまく仕事をします。

awk ' function isDashed(ln){return ln ~ /^---+/};function addLn(){ln2=ln1; ln1=ln0;ln0=$0};function isLoaded(){return l==1||ln2!=""}; function printHeader(){hdr=hnames"\n"hdash;if(hdr!=lastHeader){lastHeader=hdr;print hdr};hnames="";hdash=""};function isHeaderFirstLn(){return isDashed(ln0) && !isDashed(ln1) && !isDashed(ln2) }; function isDataFirstLn(){return isDashed(ln2)&&!isDashed(ln1)&&!isDashed(ln0)}                         BEGIN{_d=1;h=1;hnames="";hdash="";val="";ln2="";ln1="";ln0="";fheadln=""}                                 { addLn();  if(!isLoaded()){next}; l=1;             if(h==1){if(!isDataFirstLn()){if(_d==0){hnames=hnames" "ln1;_d=1;}else{hdash=hdash" "ln1;_d=0}}else{_d=0;h=0;val=ln1;printHeader()}}else{if(!isHeaderFirstLn()){val=val" "ln1}else{print val;val="";_d=1;h=1;hnames=ln1}}   }END{if(val!="")print val}'

他の人がこのスクリプトを改善しようとする場合、変数は以下のとおりです:hnames-ヘッダーの列名、hdash-ヘッダーの下に破線、h-現在ヘッダーを解析中かどうか(then == 1) val-データ、_d--hnamesとhdashの間でスワップするため、ln0-最後に読み込まれた行、ln1-以前に読み込まれた行(実際に作業している行)、ln2-ln1の前に読み込まれた行

ハッピーパース!

ああ、ほとんど忘れていました...私はこれを使用して、sqlplusの出力を自分でプリティにしています:

[Oracle@ora ~]$ cat prettify_sql 
set lines 256
set trimout on
set tab off
set pagesize 100
set colsep " | "

colsepはオプションですが、出力をsqliteのように見せるので、スクリプトを使用して解析する方が簡単です。

編集:解析された出力と解析されていない出力の小さなプレビュー

A little preview of parsed and non-parsed output

1
netikras