В сообществе * nix мы любим однострочники!
Вы можете установить разметку 'csv on' в sqlplus (> = 12)
Создать файл запроса
cat > query.sql <<EOF
set head off
set feed off
set timing off
set trimspool on
set term off
spool output.csv
select
object_id,
owner,
object_name,
object_type,
status,
created,
last_ddl_time
from dba_objects;
spool off
exit;
EOF
Буферизация output.csv примерно так:
sqlplus -s -m "CSV ON DELIM ',' QUOTE ON" user/password@\"localhost:1521/<my_service>\" @query.sql
Другой вариант - SQLcl (инструмент CLI для SQL Developer. Двоичное имя: 'sql' переименован 'sqlcl' )
Создать файл запроса (Примечание! Срок включен | выключен)
cat > query.sql <<EOF
set head off
set feed off
set timing off
set term off
set trimspool on
set sqlformat csv
spool output.csv
select
object_id,
owner,
object_name,
object_type,
status,
created,
last_ddl_time
from dba_objects
where rownum < 5;
spool off
exit;
EOF
Буферизация output.csv вот так:
sqlcl -s system/oracle@\"localhost:1521/XEPDB1\" @query.sql
Альт!
cat output.csv
9,"SYS","I_FILE#_BLOCK#","INDEX","VALID",18.10.2018 07:49:04,18.10.2018 07:49:04
38,"SYS","I_OBJ3","INDEX","VALID",18.10.2018 07:49:04,18.10.2018 07:49:04
45,"SYS","I_TS1","INDEX","VALID",18.10.2018 07:49:04,18.10.2018 07:49:04
51,"SYS","I_CON1","INDEX","VALID",18.10.2018 07:49:04,18.10.2018 07:49:04
И победителем является sqlplus для 77k строк!(удален фильтр rownum <5) </strong>
time sqlcl -s system/oracle@\"localhost:1521/XEPDB1\" @query.sql
real 0m23.776s
user 0m39.542s
sys 0m1.293s
time sqlplus -s -m "CSV ON DELIM ',' QUOTE ON" system/oracle@localhost/XEPDB1 @query.sql
real 0m3.066s
user 0m0.700s
sys 0m0.265s
wc -l output.csv
77480 output.csv
Вы можете экспериментировать с форматами в SQL Developer.
select /*CSV|HTML|JSON|TEXT|<TONSOFOTHERFORMATS>*/ from dba_objects;
Если вы загружаетеCSV в базу данных, этот инструмент сделает это!
https://github.com/csv2db/csv2db
Удачи!