如何使sqlplus输出出现在一行中?

Ksh*_*rma 59 oracle sqlplus

我有一张有 100 列的表格。在SQL Plus输出换行中选择数据时,使其难以阅读。

我更喜欢的是出现一个水平滚动条,或者以某种方式将输出发送到 less

我在 SQLPlus 中运行以下语句 -

SET LINESIZE 32000;
SET PAGESIZE 40000;
SET LONG 50000;
SPOOL output.txt
SELECT * FROM big_table;
Run Code Online (Sandbox Code Playgroud)

然后在bash我跑 -

少输出.txt

输出仍然显示为已包装且不可读。

mir*_*173 66

强制 sqlplus 不换行是不够的。还需要告诉查看器您用来查看假脱机文件不要换行。如果你的观众是less那么-S的选项,你必须根据使用 https://superuser.com/questions/272818/how-to-turn-off-word-wrap-in-less。在 Unix/Linux 上,您可以使用head -1 output.txt获取文件的第一行,然后检查这是否符合预期,或者您可以使用od -c output.txt|head 查看换行符实际放置在输出文件中的位置。

如果您显示 LONG 列并且它们的值包含换行符,那么将为这些列值打印多行,并且您不能用 sqlplus 设置否决这一点。


以下 sqlplus 命令可能有用:

  • SET LINESIZE linesize线的长度。在大多数情况下,最大值为linesize32767。如果将 LINESIZE 设置为无效值并检查错误消息,SET LINESIZE 0则可以找到最大值,因此可能会给出SP2-0267: linesize option 0 out of range (1 through 32767) (1)
  • SET TRIMSPOOL ON 否则 spoolfile 中的每一行都用空格填充,直到达到 linesize。
  • SET TRIMOUT ON 否则输出中的每一行都被空白填充,直到达到 linesize。
  • SET WRAP OFF如果该行比 LINESIZE 长,则截断该行。如果 linesize 足够大,则不应发生这种情况。
  • SET TERMOUT OFF禁止将结果打印到输出。这些行仍会写入假脱机文件。这可能会大大加快语句的执行时间。
  • SET PAGESIZE 0 设置无限的页面大小并避免标题、标题等。
  • 还有一些其他SET参数与输出(NUMWIDTH、NUMFORMAT、LONG、COLSEP)和性能(ARRAYSIZE、LONGCHUNKSIZE)有关。

您必须使用该COLUMN命令来格式化各个列。

例如,column name format a30name输出中的列格式化为最大长度为 30 个字符。

如果您希望显示大小不是固定的,但它应该等于一行中列的实际值的大小,那么我知道的唯一方法是更改​​语句的 select 子句以获得所需的结果并使用字符串连接运算符||,例如

select emp_id||' '||first_name||' '||last_name
from emp;
Run Code Online (Sandbox Code Playgroud)

SQL*Plus 用户指南和参考中可以找到所有变量的完整描述。

如果您想重复使用某些设置(或 COLUMN 定义),您可以将它们存储在一个文件中,并在您再次需要它们时运行该文件。如果您启动 sqlplus,您甚至可以自动运行此文件。

(1) “如何找到 LINESIZE 最大值(取决于系统)(文档 ID 1547262.1)”

  • 不错的回答... (2认同)
  • @YperSillyCubeᵀᴹ 说的:) (2认同)

Bal*_*app 8

您需要设置以下内容:

SET WRAP OFF
Run Code Online (Sandbox Code Playgroud)

  • `set linesize 30000` `SET WRAP OFF` 对我有用 (3认同)

Dev*_*udh 5

你可以这样设置

SET WRAP OFF

SET PAGESIZE 0
Run Code Online (Sandbox Code Playgroud)