SQL Plus
中选择数据时,输出会自动换行,从而难以阅读。我想要的是出现水平滚动条,或者以某种方式将输出发送到
less
我在SQLPlus中运行以下语句-
SET LINESIZE 32000;
SET PAGESIZE 40000;
SET LONG 50000;
SPOOL output.txt
SELECT * FROM big_table;
然后在
bash
中运行-output.txt
输出仍然显示为包装且不可读。
#1 楼
强制sqlplus不换行是不够的。还必须告诉查看器您用于查看假脱机文件而不换行。如果查看器是
less
,则-S
是您必须根据https:// superuser使用的选项。 com / questions / 272818 / how-to-to-off-off-word-wrap-in-less。
在Unix / Linux上,您可以使用
head -1 output.txt
来获取文件的第一行,因此请检查这是否符合预期或使用od -c output.txt|head
查看换行符在输出文件中的实际位置。
如果显示LONG列且其值包含换行符,则将为此打印多行列值,并且您不能使用sqlplus设置来取代它。
以下sqlplus命令可能有用:
SET LINESIZE linesize
的长度线。在大多数情况下,linesize
的最大值为32767。如果将LINESIZE设置为无效值并检查错误消息,您可以找出最大值。SET LINESIZE 0
可能会给SP2-0267: linesize option 0 out of range (1 through 32767)
(1)SET TRIMSPOOL ON
否则,假脱机文件中的每一行都将填充空白,直到达到行大小为止。 SET TRIMOUT ON
否则,输出中的每一行都将填充空白,直到达到行大小为止。 SET WRAP OFF
如果行长于LINESIZE,则将其截断。如果linesize足够大,则不会发生这种情况。 SET TERMOUT OFF
禁止将结果打印到输出。 这些行仍然被写到假脱机文件中。这可能会大大延长语句的执行时间。
SET PAGESIZE 0
设置一个无限的页面大小,避免使用标题,标题等。还有一些其他
SET
参数涉及到输出(NUMWIDTH, NUMFORMAT,LONG,COLSEP)和性能(ARRAYSIZE,LONGCHUNKSIZE)。您必须使用
COLUMN
命令格式化各个列。 例如。
column name format a30
将格式化输出中的name
列,最大长度为30个字符。 如果您不希望固定显示大小,但应使其等于行中列的实际值的大小,那么我知道的唯一方法是更改您的select子句语句以获得所需的结果并使用
字符串连接运算符
||
,例如,select emp_id||' '||first_name||' '||last_name
from emp;
可以在SQL * Plus中找到所有变量的完整描述。指南和参考。
如果要重用某些设置(或COLUMN定义),可以将它们存储在文件中,并在需要时再次运行该文件。如果启动sqlplus,甚至可以自动运行此文件。
(1)“如何查找LINESIZE最大值(取决于系统)(文档ID 1547262.1)”
评论
LONGCHUNKSIZE不仅与性能有关,它似乎还需要避免LINESIZE之外的不必要的换行,只是使用DBMS_METADATA.get_ddl()的不可用输出进行了试验
–丹尼尔·韦里特(DanielVérité)
2015年1月7日在13:36
不错的答案...
–超立方体ᵀᴹ
15年12月18日在9:36
@YperSillyCubeᵀᴹ说了什么:)
–汤姆五世
15年12月24日在16:23
您应该使用SET PAGESIZE 1000而不是0,否则在发出“ SELECT”命令时列标题将不会打印。
–皮埃尔C
19年7月25日在0:41
@PierreC就是为什么我写了“ SET PAGESIZE 0来设置一个无限的页面大小并避免标题,标题等。”
– Miracle173
19年7月25日在4:53
#2 楼
您需要设置以下内容:SET WRAP OFF
评论
将行大小设置为30000 SET WRAP OFF对我有用
–ren
2015年12月11日14:22
#3 楼
您可以这样设置SET WRAP OFF
SET PAGESIZE 0
评论
我还希望这些列能够自动展开,而不是我必须分别为每个列设置列大小。