#sql #oracle
Вопрос:
Я использую sqlplus в сценарии оболочки для подключения к базе данных и файлу spool .csv.
код-это:-
sqlplus -s user/pass@db <<EOF> /dev/null 2>amp;1
SET COLSEP ','
SET FEEDBACK OFF
SET TRIMSPOOL ON
SET UNDERLINE OFF
SET LINESIZE 10000
SET PAGESIZE 10000
spool customer.csv
select * from customer where cust_name='john';
spool off
EOF
я получаю обрезку заголовка для нескольких колумов, таких как 1-й, 2-й, 4-й и 7-й.
Ответ №1:
Вам нужно будет указать SQL*Plus
, какой ширины вы хотите, чтобы были столбцы. Предполагая, что я правильно подсчитал длину каждого заголовка
column sys_creation_date format a17
column sys_update_date format a15
column dl_service format a10
column eff_date_time format a13
Возможно, вам будет приятнее переключиться на SQLcl, так как это облегчает создание CSV-файлов. Просто
select /*csv*/ * from emp
или
set sqlformat csv
select * from emp
Комментарии:
1. есть ли у нас возможность установить формат для всех столбцов?
2. здесь…настройка формата поможет только в том случае , если столбцов меньше, что если у нас 50-70 столбцов, то это не очень хорошая идея.
3. @Roger — Если вы используете
SQL*Plus
, и вы хотите убедиться, что заголовок столбца распечатан полностью, вам нужно будет отформатировать столбец. Да, это потенциально 70 строк форматирования, если в вашем запросе 70 столбцов. Вот почему SQLcl, как правило, является лучшим вариантом, если только вы по какой-то причине не привязаны к старым инструментам.4. @JustinCave — sqlcli не требуется для использования директивы /*csv*/. sqlplus (по крайней мере, на 19c) также справится с этим.
5. @EdStevens — Интересно. Я знал, что разработчик SQL и SQLcl поддерживают это. Не знал, что он был добавлен
SQL*Plus
.