例如,执行长语句以显示各种列时的问题之一
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
等等...
有没有办法说根据文本宽度调整列宽,以便每个列都很好地适应。而不是这样的..
我更喜欢一些不涉及使用函数的解决方案。
不,没有简单的方法可以让 SQL*Plus “自动调整”列宽到文本宽度。
但是,编写脚本可以让您的生活更轻松。
首先,减少打字。不要做
SET COLUMN FORENAME FORMAT A10
,而是做类似 @c forename 10
的事情。
17:33:31 SYSTEM@dwal> cl col
columns cleared
17:33:33 SYSTEM@dwal> select * from dual;
D
-
X
Elapsed: 00:00:00.01
17:33:37 SYSTEM@dwal> @c dummy 10
17:33:43 SYSTEM@dwal> select * from dual;
DUMMY
----------
X
Elapsed: 00:00:00.01
17:33:45 SYSTEM@dwal> get s:\c.sql
1* col &1. for a&2.
17:33:50 SYSTEM@dwal>
或者像这样快速隐藏宽列:
17:48:44 SYSTEM@dwal> select owner, table_name from all_tables where rownum = 1;
OWNER TABLE_NAME
------------------------------ ------------------------------
SYS CON$
Elapsed: 00:00:00.24
17:48:49 SYSTEM@dwal> @np owner
17:48:53 SYSTEM@dwal> select owner, table_name from all_tables where rownum = 1;
TABLE_NAME
------------------------------
CON$
Elapsed: 00:00:00.26
17:48:56 SYSTEM@dwal> get s:\np
1 col &1 noprint
2* @undef
这些只是我每天使用的众多脚本中的两个。这种方法需要时间和一些个人的定制精力来适应它并使其有效,但会大大减少您按下的按键数量。
其次是glogin.sql。这是一个每次您连接到某个地方时都会执行的脚本。我假设您知道一系列“长”列,这些列可以使您的换行。
只需在那里列出它们,然后您的
SET COLUMN FORENAME FORMAT A10
SET COLUMN SURNAME FORMAT A10
每次(重新)连接时都会设置列参数。
Tom Kyte 编写了一个 print_table 过程,它以垂直方式显示结果集。
例如:
SQL> exec print_table('select g.guestid, g.forename, ... from ...')
GUESTID : 210
FORENAME : DINGLE
...
etc...
....
-----------------
PL/SQL procedure successfully completed.
此过程非常有用,尤其是当结果集很小(最好不超过 10 行)时。
ansiconsole
SQL 格式可能就是您正在寻找的。
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...
此格式会根据查询结果的大小自动调整列的大小。
从语句中删除
set
:
COLUMN FORENAME FORMAT A10
SET COLUMN SURNAME FORMAT A10
最佳解决方案
set markup csv on
会话在运行查询之前不知道要返回的字符串的最大长度是多少。当然,列的大小应该适当,但也许您真的会得到一个 80 个字符长的名字列表 - 如果不是,那么您的数据类型长度太大。
正如 Eric 所说,GUI 工具更好,而且 Oracle 的 SQL Developer 是免费的而且很好。