9

例如,执行用于显示各种列的长语句时的问题之一

 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

例如。但是,许多列需要反复经过,这很长。IE

SET COLUMN FORENAME FORMAT A10
SET COLUMN SURNAME FORMAT A10

等等...

有没有办法说根据文本宽度调整列宽,以便每个都很好地适应。而不是这样的..

在此处输入图像描述

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

4

6 回答 6

2

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

每次(重新)连接时都会设置列参数。

于 2013-03-18T10:04:40.937 回答
0

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 行。

于 2014-04-01T07:03:35.170 回答
0

ansiconsoleSQL 格式可能是您正在寻找的。

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

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

于 2016-05-25T16:41:07.600 回答
0

正如其他用户已经说过的,sqlplus 没有简单的解决方案。也许使用glogin.sqlorlogin.sql文件会有所帮助(@René Nyffenegger 提供了一篇关于这些文件的文章)。您可以将列定义放在这些文件中。如果您总是查询相同的查询,或者您的列名称一致,这可能会有所帮助。

或者您将列语句放在您调用的脚本中

@scriptname.sql

如果要使用列格式。您将脚本放在作为SQLPATH变量一部分的目录中,以便可以从任何目录调用它。

或者您使用其他工具。一位用户已经指向SQLcl

于 2016-12-21T14:59:01.383 回答
0

set从语句中删除:

COLUMN FORENAME FORMAT A10

SET COLUMN SURNAME FORMAT A10

于 2022-02-15T10:13:24.583 回答
-1

会话在运行查询之前不知道要返回的字符串的最大长度是多少。当然,该列的大小应该适当,但也许你真的会得到一个 80 个字符长的名字列表——如果不是,那么你的数据类型长度太大了。

正如 Eric 所说,GUI 工具更好,而 Oracle 的 SQL Developer 是免费的,而且很好。

于 2013-03-18T09:59:45.197 回答