В примере кода, который вы предоставили, используется UTL_FILE, который может только получать доступ к файлам на сервере Oracle / создавать их.
Поскольку вы упоминаете, что в настоящее время вы выполняете запросы вручную, скопируйте / прошлый (?) В Excel, UTL_FILEопция вам не поможет.
Теперь, чтобы поместить эти данные запроса в локальные файлы / файлы на стороне клиента, этот подход может помочь вам начать работу - напишите скрипт, который выполняется в SQLPlus / SQLDeveloper, и выведите CSV * 1006.* файл, используя следующее в качестве шаблона / примера.Формат XLSX сложнее.
myscript.sql:
SET LINES 2000
SET PAGES 0
SET TRIMSPOOL ON
SPOOL the_output.csv
SELECT col1 || ',' ||
col2 || ',' ||
col3 || ',' ||
col4 || ',' ||
col5 || ',' ||
col6
FROM the_table
WHERE ...;
SPOOL OFF
Другой вариант, который у вас есть, это использовать DBMS_OUTPUT.PUT_LINE следующим образом:
create or replace PROCEDURE EXAMPLE_FILE_CSV AS
CURSOR c_data IS
SELECT col1,
col2,
col3,
col4,
col5,
col6
FROM the_table
WHERE ...;
BEGIN
FOR cur_rec IN c_data LOOP
DMBS_OUTPUT.PUT_LINE(
cur_rec.COL1 || ',' ||
cur_rec.COL2 || ',' ||
cur_rec.COL3 || ',' ||
cur_rec.COL4 || ',' ||
cur_rec.COL5 || ',' ||
cur_rec.COL6 ;
END LOOP;
END;
/
Чтобы вызвать это, выбудет делать следующее в скрипте вызывающего абонента:
SET SERVEROUTPUT ON
SET VERIFY OFF
SET LINES 2000
SET TRIMSPOOL OFF
SPOOL the_output.csv
EXEC EXAMPLE_FILE_CSV;
SPOOL OFF;