Для этого решения необходимо запустить SQLPLUS и файл .sql из файла .bat или использовать другой метод с соответствующими учетными данными Oracle. Файл .bat может быть запущен вручную, с запланированной задачи сервера, задания Control-M и т. Д ...
Вывод в формате .csv. Для этого также необходимо заменить все запятые в выходных данных другими символами или столбцом риска / несоответствием данных в выходных данных.
Хитрость в том, что заголовки столбцов и данные выбираются в двух разных операторах SELECT.
Он не идеален, но он работает, и он наиболее близок к стандартному Oracle SQL, который я нашел для динамического заголовка столбца вне среды разработки. Мы широко используем это для создания регулярных ежедневных / еженедельных / ежемесячных отчетов для пользователей, не прибегая к графическому интерфейсу. Вывод сохраняется в общую сетевую директорию / Sharepoint.
REM BEGIN runExtract1.bat file -----------------------------------------
sqlplus username/password@database @C:\DailyExtracts\Extract1.sql > C:\DailyExtracts\Extract1.log
exit
REM END runExtract1.bat file -------------------------------------------
REM BEGIN Extract1.sql file --------------------------------------------
set colsep ,
set pagesize 0
set trimspool on
set linesize 4000
column dt new_val X
select to_char(sysdate,'MON-YYYY') dt from dual;
spool c:\DailyExtracts\&X._Extract1.csv
select '&X-Project_id', 'datacolumn2-Project_Name', 'datacolumn3-Plant_id' from dual;
select
PROJ_ID
||','||
replace(PROJ_NAME,',',';')-- "Project Name"
||','||
PLANT_ID-- "Plant ID"
from PROJECTS
where ADDED_DATE >= TO_DATE('01-'||(select to_char(sysdate,'MON-YYYY') from dual));
spool off
exit
/
REM ------------------------------------------------------------------
CSV OUTPUT (opened in Excel and copy/pasted):
old 1: select '&X-Project_id' 'datacolumn2-Project_Name' 'datacolumn3-Plant_id' from dual
new 1: select 'MAR-2018-Project_id' 'datacolumn2-Project_Name' 'datacolumn3-Plant_id' from dual
MAR-2018-Project_id datacolumn2-Project_Name datacolumn3-Plant_id
31415 name1 1007
31415 name1 2032
32123 name2 3302
32123 name2 3384
32963 name3 2530
33629 name4 1161
34180 name5 1173
34180 name5 1205
...
...
etc...
135 rows selected.