【问题标题】:Adding a newline in a spool file在假脱机文件中添加换行符
【发布时间】:2013-10-15 00:49:24
【问题描述】:

有没有办法在 sql spool 文件中添加换行符?
我需要以特定方式构造文件。

'\n' 似乎不起作用并按字面意思打印

谢谢,

更新:我的 SQL 文件

-- Prepare blank file
SET NEWPAGE 0
SET SPACE 0
SET LINESIZE 250
SET PAGESIZE 0
SET ECHO OFF
SET FEEDBACK OFF
SET VERIFY OFF
SET HEADING OFF
SET MARKUP HTML OFF 
SPOOL OFF

-- Create the Employees file 
SPOOL employees.txt;
SELECT (case GENDER
when '1' then 'Mr.'
else 'Mrs.'
end ) ||' '|| 
LNAME ||', '||
FNAME ||' newline character '||
FUNCTION ||', '|| DEPARTMENT
from EMPLOYEES;
SPOOL OFF;

-- EXIT SQL and go back to the .bat
EXIT;

结果会是这样的:

先生。能源部,约翰
财务经理

【问题讨论】:

  • 你的意思是输出中间只有一个空行吗?您是在后台处理普通 SQL,还是通过 dbms_output 从 PL/SQL 进行后台处理?
  • 我正在后台处理纯 SQL(我已删除 pl/sql 标记以防止混淆)

标签: oracle sqlplus spool


【解决方案1】:

您可以使用 CHR function 的 ASCII 码(好吧,不是严格意义上的 ASCII,但在这里足够接近)嵌入换行符,在本例中使用 CHR(10) 来表示 \n

SELECT (case GENDER
when '1' then 'Mr.'
else 'Mrs.'
end ) ||' '|| 
LNAME ||', '||
FNAME || CHR(10) ||
FUNCTION ||', '|| DEPARTMENT
from EMPLOYEES;

如果您还想要回车,也可以附加 CHR(13) (\r)。

如 cmets 中所述,这也会在行之间引入一个空白行。据我所知,摆脱这种情况的唯一方法是 - 有点不直观 - SET RECSEP OFF。新行似乎使 SQL*Plus 将输出视为已包装,您还可以使用 SET WRAP OFF 命令或 COLUMN ... TRUNCATE 选项查看,这两者都抑制了第二行。

如果您只想将数据假脱机到文件而不是终端,您可能还需要SET TAB OFFSET TERMOUT OFF


(在更详细地编辑问题之前)

如果您只想在两个查询的结果之间有一个空行,您可以使用SQL*Plus PROMPT command,不带参数:

select dummy from dual;
prompt
select dummy from dual;

来自文档:

PRO[MPT] [text]

其中 text 表示您要显示的消息的文本。

将指定的消息或空行发送到用户的屏幕。如果 您省略 textPROMPT 在用户屏幕上显示一个空白行。

如果您对输出的外观有其他特定要求,也可以查看formatting SQL*Plus reports 部分。

如果您有一个通过dbms_output 调用产生输出的PL/SQL 块,您可以使用NEW_LINE 在现有输出之间添加一个空行:

dbms_output.put_line('some text');
dbms_output.new_line;
dbms_output.put_line('some more text');

【讨论】:

  • 添加 chr(10) 可以很好地分隔它们,但它似乎也在结果之间添加了一个额外的空白行。有什么办法可以摆脱它?
  • @Andreas - 我花了一段时间才想起那个……你需要set recsep off。答案已更新。
  • 谢谢,完成了这项工作
猜你喜欢
  • 1970-01-01
  • 2016-12-27
  • 1970-01-01
  • 1970-01-01
  • 2015-12-25
  • 2012-07-30
  • 2021-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多