SPOOL
- это функция SQL Plus
, вы не можете использовать ее внутри PL / SQL. Многие инструменты, такие как SQL Developer et c. поддержка команд sqlplus. Сказав это, вам нужно вызвать все процедуры и вызвать sqlplus на уровне ОС. Если вы хотите записать вывод процедуры в файл ОС, тогда вы можете использовать UTL_FILE
. Если вы хотите избежать этого, то единственный способ - использовать DBMS_OUTPUT
внутри ваших процедур, а затем буферизовать вывод в файл.
Начиная с Oracle 12.2
и далее, вы можете использовать Команда SET MARKUP :
SET MARKUP CSV ON
Синтаксис SET MARKUP
имеет две опции:
Параметр CSV
имеет следующий синтаксис:
CSV {ON|OFF} [DELIMI[TER] character] [QUOTE {ON|OFF}]
См. Документацию SQLPlus для создания CSV сообщает .
Альтернативное решение UTL_FILE
:
Вы можете использовать DBMS_SCHEDULER
, чтобы создать задание для сценария SQL. В последних версиях планировщик базы данных был усовершенствован, чтобы можно было запускать сценарии стиля SQL Plus непосредственно из базы данных без необходимости предоставления ОС доступа к серверу базы данных или исполняемому файлу SQL* Plus.
Например:
declare
sql_script VARCHAR2(32767) :=
'conn /@db
set markup csv on
set pages 0
set lines 200
set trimspool on
spool c:\your_directory\file.csv
select * from tab;
spool off';
begin
dbms_scheduler.create_job(
job_name => 'UNLOAD_DATA',
job_type => 'SQL_SCRIPT',
job_action => sql_script,
credential_name => 'username',
enabled => true
);
end;
/
Вы можете расширить и реализовать приведенный выше пример для ваших сложных процедур. Вот хорошее объяснение здесь .