У меня ниже анонимный блок, где я использую курсор для создания набора результатов и сохранения его в файл TEST_REPORT.csv
. Но я получаю сообщение об ошибке в строке, где я использую катушку как:
PLS-00103: Encountered the symbol "H" when expecting one of the following:
:= . ( @ % ;
Я считаю, что не могу использовать катушку в PL / SQL, но не уверен, поэтому я попробовал код ниже. А также я не могу использовать логику UTL_FILE или UTL_FILE_DIR из-за ограничения безопасности на производстве. Поскольку сотрудники работают в разных отделах, я хочу создать отдельный файл CSV для каждого сотрудника по отношению к их отделу.
Есть ли способ сломать этот код и использовать спул для создания файла csv или любой другой логики? Также, если невозможно использовать спул в анонимном блоке, могу ли я использовать его во время выполнения этого кода для создания файлов?
Если это невозможно с использованием спула, возможно ли, если я смогу организовать свой результат запроса таким образом, чтобы было легко экспортировать результат в один файл csv после выполнения этого анонимного блока, а затем я могу разделить один файл csv на несколько файлы в зависимости от сотрудника с его отделом вручную?
Файл Generate-And-Run.sql
SET SERVEROUTPUT ON;
set verify off
SET LONG 100000
SET lines 1000
SET sqlformat SELECT;
SPOOL C:\Loop-Flattener.sql;
PROMPT VAR V_A VARCHAR2(64);
BEGIN
FOR TARGET_POINTER IN (select ID,
name,
ST_ID
from TEST_REPORT
where rownum <5)
LOOP
DBMS_OUTPUT.PUT_LINE('DEFINE TARGET = '''||TARGET_POINTER.ID||''';');
DBMS_OUTPUT.PUT_LINE('EXEC :V_A := '''||TARGET_POINTER.ID||'''; ');
DBMS_OUTPUT.PUT_LINE('@@Target-Csv-Generator.sql;');
END LOOP;
END;
/
SPOOL OFF;