当我像下面这样查询我的表时,列"NAME“的输出太长了。最近,我将数据类型更改为VARCHAR2(150),而不是VARCHAR(150),以避免保存空白。然而,输出似乎包括(一些?)不管怎么说白空间。有人能弄清楚这是怎么回事吗?我是在这里查看空白空间,还是只有我的终端/控制台才有问题,或者SQLPLUS本身是否与其有关?使用Windows终端。
SQL> SELECT * FROM SYS.O1_Orders;
ID
----------
NAME
--------------------------------------------------------------------------------
QUANTITY PRICE
---------- ----------
1
Cakes
25 200发布于 2014-09-02 09:01:56
varchar2存储时没有空白填充,但varchar也没有,这对SQL*Plus显示它的方式没有任何影响。
SQL*Plus显示列的最大宽度,该列可以包含在检索实际结果集之前从查询元数据中获得。否则,它必须获取所有的值,将它们保存在某个地方,找到最长值的长度,然后才开始生成输出。而且输出会因不同的执行情况而不同,这对报告可能没有用。
你有几个选择。如果您知道该值永远不会超过某一长度(在这种情况下,为什么列的最大大小大于该长度?)然后,您可以将其转换为命令,或者告诉SQL*Plus列宽度使用
column name format a20更多的是关于文档中的格式设置。。但是,如果出现更长的值,则会进行包装(如果在查询中进行强制转换/截断,则会丢失数据)。
您还可以将所有输出放在一行上,您还没有显式地询问这些输出,但这会使事情看起来更整洁:
set linesize 200..。或者为您的所有列提供足够宽的值。当然,你可以把这两种设置结合起来。单行仍然可以在您的终端窗口内包装,因此您可以在需要时使其更宽。
发布于 2014-09-02 09:01:04
这纯粹是一个SQL*Plus显示问题。在VARCHAR和VARCHAR2数据类型之间没有区别(目前)--也不会对您保存的数据进行空间填充。只有CHAR列才能做到这一点。
在SQL*Plus中,可以控制name列显示的宽度。
SQL> column name format a30;例如,将告诉SQL*Plus使用30列来显示name列中的数据。您可以根据数据的实际长度、想要在一行中容纳多少数据等来向上或向下调整。您必须将其与SQL语句一起放入脚本中,或者在发出语句之前在每个会话中复制它,或者需要将其添加到登录/ glogin.sql文件中。
如果您想要生成固定宽度的文本报表,SQL*Plus是一个很好的工具。但是,如果您只是交互地运行查询,那么它并不是最方便用户的解决方案--调整文本列的宽度,处理比行长的输出,等等很快就会变老。如果您正在进行交互式开发,具有适当GUI的SQL这样的工具就会友好得多。
发布于 2015-06-18 11:20:56
您可以使用集NUMWIDTH {10 \ n}
设置显示数字的默认宽度。
或使用SET LONG {80 \ n}
设置显示BLOB、BFILE、CLOB、LONG、NCLOB和XMLType值的最大宽度(以字节为单位)。
问题仍然存在,如果有一个SET选项显示一个固定的宽度,远在所有VARCHAR2字段。如我所知,如上所述,您可以使用列 column_name format 模型来格式化特定的(!)特定表的列。
https://stackoverflow.com/questions/25619463
复制相似问题