Добавление новой строки в файл спула

Есть ли способ добавить новую строку в файл спула 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;

Результат будет примерно таким:

Г-н Доу, Джон
Менеджер по финансам


person Andreas    schedule 08.10.2013    source источник
comment
Вы имеете в виду просто пустую строку в середине вывода? Вы буферизуете простой SQL или из PL/SQL через dbms_output?   -  person Alex Poole    schedule 08.10.2013
comment
Я буферизую простой SQL (я удалил тег pl/sql, чтобы избежать путаницы)   -  person Andreas    schedule 08.10.2013


Ответы (1)


Вы можете внедрить символ новой строки, используя его код ASCII (ну, не строго ASCII, но здесь достаточно близко), используя CHR function, в данном случае с 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 OFF и SET TERMOUT OFF, если хотите, чтобы данные буферизировались только в файл, а не в терминал.


(До того, как вопрос был отредактирован более подробно)

Если вам просто нужна пустая строка между результатами двух запросов, вы можете использовать команда SQL*Plus PROMPT без аргументов:

select dummy from dual;
prompt
select dummy from dual;

Из документов:

PRO[MPT] [text]

где text представляет собой текст сообщения, которое вы хотите отобразить.

Отправляет указанное сообщение или пустую строку на экран пользователя. Если вы опустите текст, PROMPT отобразит пустую строку на экране пользователя.

Вы также можете ознакомиться с разделом по форматированию отчетов 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');
person Alex Poole    schedule 08.10.2013
comment
Добавление chr(10) хорошо разделяет их, но также, кажется, добавляет дополнительную пустую строку между результатами. Я могу как-то избавиться от этого? - person Andreas; 08.10.2013
comment
@Андреас, мне потребовалось время, чтобы вспомнить это... тебе нужно set recsep off. Ответ обновлен. - person Alex Poole; 08.10.2013
comment
Спасибо, это сделало работу - person Andreas; 08.10.2013