私はプロではありません。しかし、おそらくあなたはとにかく私を助けることができます...
27列のテーブルがあり、行内に改行のあるデータがあります。選択した行をsql-plusスプールでエクスポートしようとすると、いくつかの問題があります。私はここに与えられたアドバイスを試しました: sqlplusの出力を1行で表示する方法は? ですが、それらは私を助けません。以下に説明します。
まず、SQLとクエリの構成:
set term off
set echo off
set underline off
set colsep ';'
set linesize 32767
set pages 10000
set trimspool on
set trimout on
set feedback off
set heading on
set newpage 0
set headsep off
;set wrap off
set termout off
set long 20000
spool D:\tmp_Datenaustausch\Export-141204.csv
SELECT MEDIENNR, ISBN, ISBN2, ISBNSUCH, KATKARTE1, BUCHKARTE1, SIGNATUR1, KATKARTE2,
BUCHKARTE2, SIGNATUR2, KATKARTE3, BUCHKARTE3, SIGNATUR3, MAB2, FEHLERCODE, FARBE,
ANZSYKKARTEN, KKSTATUS, BKSTATUS, MABSTATUS, SESTATUS, FARBSTATUS, ASSTATUS,
REZENSION, REZENSENT, STICHWORTE, UPDDATE FROM Bekartungsdaten WHERE upddate like
TO_DATE('2014-12-01', 'yyyy-mm-dd');
spool off;
exit;
/
私の問題:
助けてくれたら嬉しいです!
1)見出しを1行にしたい場合は、UNIONをデュアルから選択して使用する必要があります。例:
select '"'||'col1'||'","'||'"col2"'||'","'||'"col3"'
from dual
union
select '"'||col1||'","'||col2||'","'||col3||'"'
from table;
2)これはトリッキーです。これは、改行が実際に何のASCII文字であるかを知るのに役立ちます。それらがどのように記述されたかに応じて、一般に(常にではない)chr(10)またはchr(10)chr(13)の組み合わせになります。クエリで [〜#〜] replace [〜#〜] 関数を使用して、それらを ''で置き換えることができます。
3)引用符が必要な場合は、上記の例1を参照してください。
HTH。
レコードの見出しが欲しい場合は、これを試してみてください。
set linesize 220;
set pagesize 0;
SET NEWPAGE 0;
SET SPACE 0;
SET ECHO OFF;
SET FEEDBACK OFF;
SET VERIFY OFF;
SET HEADING OFF;
SET MARKUP HTML OFF SPOOL OFF;
spool D:\tmp_Datenaustausch\Export-141204.csv
select 'header1' ||','||
'header2' ||','||
'header3'
result from dual
union all
select a ||','||
b ||','||
c
from tableName
where coditional ;
spool off;
exit;
結果は次のようになります。
header1 | header2 | header3 | ------------------------------- a | b | c