免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4583 | 回复: 6
打印 上一主题 下一主题

用sh列表显示oracle数据库单条查询结果  关闭 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2002-03-22 19:42 |只看该作者 |倒序浏览
经常在UNIX下使用oracle数据库,用的是sqlplus,大体已经习惯了.但是有一点受不了,就是用select查询一个大表(字段比较多的表)时,虽然查的结果只有一行,但要是set head on,往往要显示几屏,每一屏都要显示一遍所有字段,根本看不清整个表的内容,如果set head off,又不知道每个值对应的是哪个字段,一个一个数太麻烦了.总想,要是这条数据纵向列表显示,左边列名,右边是值,看着该多方便啊,于是花了点写了一个shell程序,程序名就叫select.
#!/bin/sh

connectstr='username/password@connectstr'
table=`echo $*|sed 's/.*from *\([^ ]*\) *.*/\1/'|tr "[a-z]" "[A-Z]"`
where=`echo $*|sed 's/.*from/from/'`
cat > sel$$.sql << END
set head off
set feed off
set headsep off
set newp none
set linesize 255
set sqlblanklines OFF
set trimspool ON
set termout off
spool on$$.sql
select 'select '''||column_name||'|'',ltrim(rtrim('||column_name||')) $where;' from user_tab_columns where table_name='$table';
spool off
set termout on
select '##SQL BEGIN##' from dual;
select 'ColumnName| Value' from dual;
select '-----------| ------------' from dual;
@@on$$.sql
select '##SQL END##' from dual;
exit
END
sqlplus $connectstr @sel$$.sql|sed -n '/##SQL BEGIN##/,/##SQL END/{
/^$/d
/##SQL/d
p
}'|awk -F'|' '{printf &quot;%-30s%-s\n&quot;,$1,$2}'
rm -f on$$.sql sel$$.sql

哈哈,使用的时候跟在sqlplus状态下一样的语句,瞧,这是我在sh状态下查询一个有26个字段的表,要是在sqlplus状态下用set head on状态,得显示个几十屏的内容.当我在UNIX sh状态下用这个sql语句时,旁边的同事都呆住了,没搞清怎么回事.(为隐密起见,字段名用了X和乱符表示)
$ select * from testtable;
ColumnName                 Value
-----------                ------------
XXXX_ID                    2
XXXXON_ID                  3
XXXXXXXX_SUBS              2
XXXXTE_TIME                20020320173232
XXXXTOR                    0
XXXXTOR_GROUP              0
XXXXNAME                  
XXXXXXXX_BIRTHDAY_TIME   
XXXXXXXX_MODIFY_TIME       20020320173232
XXXXXXXX_OLDNO            
XXXXFIER                   0
XXXXFIER_NAME              Admin
XXXXFIER_LOGIN             super
XXXXOPERTYPE               0
XXXXXXXX_CHARGE_NO        
XXXXXXXX_BANK            
XXXXXXXX_BANK_NO         
XXXXXXXX_NET_USE           0
XXXXXXXX_ATTRIBUTE         1
XXXXUP1                    0
XXXXUP2                    Net
XXXXXXXX_BUSINESS          99
XXXXXXXX_SEX               0
XXXXXXXX_CREDIT_THRESHOLD  0
XXXXXXXX_CREDIT_FLOOR      0
XXXXXXXX_ID                11
XXXXXXXX_NAME              USER
XXXXXXXX_PASSWORD          xxxc6xxx2ab461b4
XXXXXXXX_IDENTITY         
XXXXXXXX_IDTYPE            0
XXXXXXXX_VOCATION         
XXXXXXXX_CITY            
XXXXXXXX_PROVINCE          13900000005
XXXXXXXX_COUNTRY         
XXXXXXXX_ZIP_CODE         
XXXXXXXX_PHONE             01062501658
XXXXXXXX_FAX              
XXXXXXXX_EMAIL             user@263.net
XXXXXXXX_STATUS            0
XXXXXXXX_STATUS_TIME       20020320173231
XXXXXXXX_STATUS_COMMENT   
XXXXXXXX_XXXOUNT_CXXLE     14
XXXXXXXX_PAY_TYPE          1
XXXXXXXX_NO                AN20000013
XXXXXXXX_ACCOUNT_NO        11
XXXXXXXX_XXXXING_CYCLE   
XXXXXXXX_XXXXING_AMOUNT   
XXXXXXXX_XXXXING_EAMOUNT  
XXXXXXXX_PAY_TIME         
XXXXXXXX_OWE_XXXXE         0
XXXXXXXX_PRE_XXXXK_DATE   
XXXXENCY_TYPE              0
XXXXXXXX_PARENT            0
XXXXXXXX_BANKNAME         
XXXXXXXX_BANKNUM         
XXXXXXXX_LINKMAN           99098808
XXXXICE_DELIVER_METHOD     1
XXXXXXXX_TYPE              0
XXXXXXXX_NUMBER           
CDT_XXXX_HOLDER           
CDT_XXXX_EXPIRY            20020320000000
XXXXXNT_TYPE               0
XXXXXXXX_GRADE             5
XXXXRTISE_FLAG             0
XXXXODE_ID                 0
XXXXS_ID                   0
XXXXLLER_ID                0
XXXX_NAME                  Admin
XXXX_LOGIN_NAME            super
ACYSEW_DATE                20041214000000

论坛徽章:
0
2 [报告]
发表于 2002-03-23 09:20 |只看该作者

用sh列表显示oracle数据库单条查询结果

又是精华之作。

论坛徽章:
0
3 [报告]
发表于 2003-06-18 21:33 |只看该作者

用sh列表显示oracle数据库单条查询结果

厉害,厉害,佩服,佩服
我都看不动是怎么回事

论坛徽章:
0
4 [报告]
发表于 2003-06-19 10:31 |只看该作者

用sh列表显示oracle数据库单条查询结果

我试了一下怎么不显示结果呢???生成的sql文件最好也删不掉

论坛徽章:
0
5 [报告]
发表于 2003-06-19 12:30 |只看该作者

用sh列表显示oracle数据库单条查询结果

select 'select '''||column_name||'|'',ltrim(rtrim('||column_name||')) $where;' from user_tab_columns where table_name='$table';
这句是什么意思???

论坛徽章:
0
6 [报告]
发表于 2003-06-20 15:31 |只看该作者

用sh列表显示oracle数据库单条查询结果

问题大体已经解决了,谢谢这些天来被我烦的人,呵呵.

论坛徽章:
0
7 [报告]
发表于 2003-06-23 14:48 |只看该作者

用sh列表显示oracle数据库单条查询结果

用set pages=10000会只有一header
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP