2

有没有办法在 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;

结果将类似于:

Mr. Doe, John
财务经理

4

1 回答 1

9

CHR您可以使用函数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)。

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

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


(从更详细地编辑问题之前开始)

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

select dummy from dual;
prompt
select dummy from dual;

从文档:

PRO[MPT] [text]

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

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

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

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

dbms_output.put_line('some text');
dbms_output.new_line;
dbms_output.put_line('some more text');
于 2013-10-08T07:56:32.683 回答