То, как я буферизую к CSV, отформатировало файл с помощью SQLPLUS?

Вот простой

this.$children[indexOfComponent].childsMethodName();
135
задан marc_s 13 March 2009 в 18:19
поделиться

5 ответов

Вы могли также использовать следующее, хотя это действительно представляет пробелы между полями.

set colsep ,     -- separate columns with a comma
set pagesize 0   -- No header rows
set trimspool on -- remove trailing blanks
set headsep off  -- this may or may not be useful...depends on your headings.
set linesize X   -- X should be the sum of the column widths
set numw X       -- X should be the length you want for numbers (avoid scientific notation on IDs)

spool myfile.csv

select table_name, tablespace_name 
  from all_tables
 where owner = 'SYS'
   and tablespace_name is not null;

Вывод будет похож:

    TABLE_PRIVILEGE_MAP           ,SYSTEM                        
    SYSTEM_PRIVILEGE_MAP          ,SYSTEM                        
    STMT_AUDIT_OPTION_MAP         ,SYSTEM                        
    DUAL                          ,SYSTEM 
...

Это было бы намного менее утомительно, чем вывод всех полей и конкатенации их с запятыми. Вы могли добиться простого sed сценария для удаления пробела, который появляется перед запятой, если Вы хотели.

Что-то вроде этого могло бы работать... (мои sed навыки очень ржавы, таким образом, это, вероятно, должно будет работать)

sed 's/\s+,/,/' myfile.csv 
152
ответ дан 23 November 2019 в 23:45
поделиться

Это сыро, но:

set pagesize 0 linesize 500 trimspool on feedback off echo off

select '"' || empno || '","' || ename || '","' || deptno || '"' as text
from emp

spool emp.csv
/
spool off
9
ответ дан 23 November 2019 в 23:45
поделиться

Можно явно отформатировать запрос для создания разграниченной строки с чем-то вроде:

select '"'||foo||'","'||bar||'"'
  from tab

И настроенный выходные опции как соответствующие. Как опция, переменная COLSEP на SQLPlus позволит Вам произвести разграниченные файлы, не имея необходимость явно генерировать строку с полями, связанными вместе. Однако необходимо будет поместить кавычки вокруг строк на любых столбцах, которые могли бы содержать встроенные символы запятой.

7
ответ дан 23 November 2019 в 23:45
поделиться

Я вижу похожую проблему ...

Мне нужно спутировать CSV-файл из SQLPLUS, но вывод содержит 250 столбцов.

Что я сделал, чтобы не раздражать форматирование вывода SQLPLUS:

set linesize 9999
set pagesize 50000
spool myfile.csv
select x
from
(
select col1||';'||col2||';'||col3||';'||col4||';'||col5||';'||col6||';'||col7||';'||col8||';'||col9||';'||col10||';'||col11||';'||col12||';'||col13||';'||col14||';'||col15||';'||col16||';'||col17||';'||col18||';'||col19||';'||col20||';'||col21||';'||col22||';'||col23||';'||col24||';'||col25||';'||col26||';'||col27||';'||col28||';'||col29||';'||col30 as x
from (  
      ...  here is the "core" select
     )
);
spool off

проблема в вас потеряет имена заголовков столбцов ...

вы можете добавить это:

set heading off
spool myfile.csv
select col1_name||';'||col2_name||';'||col3_name||';'||col4_name||';'||col5_name||';'||col6_name||';'||col7_name||';'||col8_name||';'||col9_name||';'||col10_name||';'||col11_name||';'||col12_name||';'||col13_name||';'||col14_name||';'||col15_name||';'||col16_name||';'||col17_name||';'||col18_name||';'||col19_name||';'||col20_name||';'||col21_name||';'||col22_name||';'||col23_name||';'||col24_name||';'||col25_name||';'||col26_name||';'||col27_name||';'||col28_name||';'||col29_name||';'||col30_name from dual;

select x
from
(
select col1||';'||col2||';'||col3||';'||col4||';'||col5||';'||col6||';'||col7||';'||col8||';'||col9||';'||col10||';'||col11||';'||col12||';'||col13||';'||col14||';'||col15||';'||col16||';'||col17||';'||col18||';'||col19||';'||col20||';'||col21||';'||col22||';'||col23||';'||col24||';'||col25||';'||col26||';'||col27||';'||col28||';'||col29||';'||col30 as x
from (  
      ...  here is the "core" select
     )
);
spool off

Я знаю, что это довольно хардкорно, но у меня это работает ...

21
ответ дан 23 November 2019 в 23:45
поделиться

предпочтительнее использовать "set colsep" в подсказке sqlplus вместо редактирования имени col по одному. Используйте sed для редактирования выходного файла.

set colsep '","'     -- separate columns with a comma
sed 's/^/"/;s/$/"/;s/\s *"/"/g;s/"\s */"/g' $outfile > $outfile.csv
4
ответ дан 23 November 2019 в 23:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: