所有列的Oracle列宽度

kxxlusnw  于 2023-06-29  发布在  Oracle
关注(0)|答案(7)|浏览(117)

例如,当执行一个长语句来显示不同的列时,问题之一是

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

等等
有没有一种方法可以根据文本宽度调整列宽,以便每个都很好地适应。而不是这样

我更喜欢一些不涉及使用函数的解决方案。

shstlldc

shstlldc1#

不,没有简单的方法可以让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

列参数将在每次连接(重新连接)时设置。

nwo49xxi

nwo49xxi2#

Tom Kyte编写了一个print_table procedure,它以垂直方式显示结果集。
例如:

SQL> exec print_table('select g.guestid, g.forename, ... from ...')
GUESTID                       : 210
FORENAME                      : DINGLE
...
etc...
....
-----------------

PL/SQL procedure successfully completed.

这个过程非常有用,尤其是当结果集很小时,理想情况下不超过10行。

t2a7ltrp

t2a7ltrp3#

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...

此格式根据查询结果的大小自动调整列的大小。

bpsygsoo

bpsygsoo4#

正如其他用户已经指出的那样,sqlplus没有简单的解决方案。也许使用glogin.sqllogin.sql文件会有帮助(@René Nyffenegger提供了一个article about those files)。您可以将列定义放在这些文件中。如果您总是查询相同的查询,或者如果您对列有一致的命名,这可能会有所帮助。
或者将列语句放入由

@scriptname.sql

如果你想使用列格式。您将脚本放在SQLPATH variable的一部分目录中,以便可以从任何目录调用它。
或者你使用其他工具。一位用户已经指出了SQLcl

velaa5lx

velaa5lx5#

从语句中删除set
COLUMN FORENAME FORMAT A10
SET COLUMN SURNAME FORMAT A10

oyjwcjzk

oyjwcjzk6#

我的解决方法是使用CSV:

set markup csv on

根据数据和你有多少列,这可能会给予你一个可读的输出。
否则,只需将结果粘贴到Excel或Visidata中。

zpjtge22

zpjtge227#

会话在运行查询之前不知道要返回的字符串的最大长度。当然,列的大小应该适当,但也许您真的会得到一个80个字符长的名字列表--如果不是,那么您的数据类型长度太大了。
正如Eric所说,GUI工具更好,Oracle的SQL Developer是免费的,也很好。

相关问题