我有一张有100列的桌子。在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