2010-06-09 64 views
21

我希望能够以漂亮的方式显示来自select的结果数据,而不是其他人的所有列。如何在oracle中更清楚地显示表格数据sqlplus

这里是sqlplus的方式显示我的表中的数据:

enter image description here

但我想告诉他们的:

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

下不了其他

+0

errr ..我想向他们展示就像一个正常的表。一个接一个 – Nubkadiya 2010-06-09 13:51:40

回答

43

我通常每列从类似的东西开始:

set lines 256 
set trimout on 
set tab off 

如果您安装了帮助信息,请查看help set。然后select name,address而不是select *如果你真的只想要这两列。

+1

不适用于Sqlplus。 – user206168 2014-10-23 17:58:54

+2

@ user206168 - 问题与SQL * Plus有关。你能扩展什么不起作用吗? – 2014-10-23 18:03:31

+0

'set space 1'和'set tab off'有什么关系? – Coffee 2014-11-13 16:53:55

38

如果你的意思是你想看到他们这样的:

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

然后在SQL另外,您可以设置列宽这样的(例如):

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; 
+3

另外我们可能会想'SET PAGESIZE 200'(说)以减少大结果集中列标题的重复。 – APC 2010-06-09 19:09:09

+0

所以这应该在表创建期间完成,或者你可以请更多关于这个 – Nubkadiya 2010-06-11 15:25:02

+0

我已经更新了我的答案 – 2010-06-11 16:07:05

1

如果您有用sqlplus做了转储和输出是乱码有人没有之前设置的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 - 我是否当前解析头文件(然后== 1),val - 数据,_d - - 在hnames和hdash之间进行交换,ln0 - 最后一行读取,ln1 - 之前读取的行(这是我实际使用的行),ln2 - line ln1之前读取

快乐解析!

哦,差点忘了......我用它来美化sqlplus中输出自己:

[[email protected] ~]$ 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

相关问题