選択した結果のデータを、他のすべての列ではなく、きれいな方法で表示できるようにしたいと思います。
Sqlplusがテーブルデータを表示する方法は次のとおりです。
しかし、私はそれらを次のように見せたいです:
Name | Address | Phone |
-------+---------------+-------------+
name1 | address1 | phone1 |
name2 | address2 | phone2 |
name3 | address3 | phone3 |
各列が下にない
私は通常、次のようなものから始めます:
set lines 256
set trimout on
set tab off
見て help set
ヘルプ情報がインストールされている場合。その後 select name,address
のではなく select *
本当にこれらの2つの列だけが必要な場合。
次のように表示したい場合:
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;
ウィンドウの幅に合わせて行サイズを設定し、次のコマンドを使用して折り返しを設定できます。
set linesize 160;
set wrap off;
私の好みに応じて160を使用しましたが、100 - 200
および設定ラップはデータではなく、データを適切に表示します。
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のように見せるので、スクリプトを使用して解析する方が簡単です。
編集:解析された出力と解析されていない出力の小さなプレビュー