在假脱机文件中添加换行符

And*_*eas 2 oracle sqlplus spool

有没有办法在sql假脱机文件中添加换行符?
我需要以特定方式构建文件.

'\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;
Run Code Online (Sandbox Code Playgroud)

结果将是这样的:

Doe先生
,财务部约翰经理

Ale*_*ole 9

你可以使用它的ASCII代码(好吧,不是严格的ASCII,但在这里足够接近)使用CHR函数嵌入一​​个换行符,在这种情况下CHR(10)表示\n:

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

如果你想要回车,也可以追加CHR(13)(\r).

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

您可能也想要SET TAB OFF,SET TERMOUT OFF如果您只希望将数据假脱机到文件,而不是终端.


(从更详细的问题编辑之前)

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

select dummy from dual;
prompt
select dummy from dual;
Run Code Online (Sandbox Code Playgroud)

来自文档:

PRO[MPT] [text]

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

将指定的消息或空行发送到用户的屏幕.如果省略文本,则PROMPT在用户屏幕上显示空白行.

如果对输出的外观有其他特定要求,您还可以查看格式化SQL*Plus报告的部分.

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

dbms_output.put_line('some text');
dbms_output.new_line;
dbms_output.put_line('some more text');
Run Code Online (Sandbox Code Playgroud)

  • @Andreas - 花了我一段时间记住那一个......你需要'设置recsep'.答案已更新. (3认同)