
OS:Windows Server 2003
DB:Oracle10g(10.2.0)
sqlplusでselect結果をcsvファイルにspoolする際に空白行が出力されて困っています。
以下のsqlを実行した場合、
-----
SET ECHO OFF
SET FEEDBACK OFF
SET HEADING OFF
SET PAGESIZE 0
SET LINESIZE 2000
SET TERMOUT OFF
SET TRIMSPOOL ON
spool test.csv
select '"'||col1||'","'||col2||'","'||col3||'"'
from table;
spool off
-----
改行を含むカラムを含む行の後に空白行が出力されます。
(2レコード目のcol3は"g"と"h"の間に改行コードがあるデータが格納されているが、何故か2レコード目と3レコード目の間に空白行が出力される)
-----
"abc","def","ghi"
"abc","def","g
hi"
"abc","def","ghi"
-----
これはsqlplusの仕様でしょうか。
2行目と3行目の間の空白行を削除してspoolする方法はありますでしょうか。
なお、改行を含むカラムの改行を改行以外の文字に置換して出力した場合は、以下のように空白行が出現しません。
-----
"abc","def","ghi"
"abc","def","gカイギョウhi"
"abc","def","ghi"
-----
No.1ベストアンサー
- 回答日時:
sqlplusの仕様だと思います。
どこまでが1行かわからなくなるから、とかそういう理由ですね。
sqlplusのオプションで回避する手は私も知りません。
なので、どうしてもspoolしたいとすれば、SET SERVEROUT ONも切って、無名ブロックを実行するとかになります。
DECLARE
lines CLOB;
CURSOR cu IS SELECT L
FROM (SELECT '"' || col1 || '","' || col2 || '","' || col3 || '"' AS L FROM table);
BEGIN
FOR cu_row IN cu LOOP
IF lines IS NULL THEN
lines:=cu_row.L;
ELSE
lines:=lines || CHR(13) || CHR(10) || cu_row.L;
END IF;
END LOOP;
DBMS_OUTPUT.PUT_LINE(lines);
END;
これであれば、全部つないで1行なので、空白行はでません。
面倒くさいですけどね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
selectした結果の余計な余白を取るにはどうしたらよいのでしょうか
Oracle
-
SQLPLUSで結果を画面に表示しない
Oracle
-
Oracleでの文字列連結サイズの上限
Oracle
-
-
4
sqlplusでヘッダーが付かない
Oracle
-
5
oracle spool SJIS → UTF-8
Oracle
-
6
SQL*Plusで、コマンドの返答を非表示にする方法
Oracle
-
7
SQL Plusで項目名が最後まで表示されない?
Oracle
-
8
SQLローダーCSV取込で、囲み文字がデータ中に入っている場合について
Oracle
-
9
OracleのSQL*PLUSで、データが折り返されて見づらいのですが。。。
その他(データベース)
-
10
PL/SQLで@ファイル名が反応しません
Oracle
-
11
sqlplusで表示が変なので、出力を整形したい。
Oracle
-
12
PL/SQLでSPOOLさせたいのですが、可能でしょうか?
Oracle
-
13
ファイルの先頭行を全て削除したい
Windows Vista・XP
-
14
SQL*Loaderでのsysdate使用
Oracle
-
15
動的にSPOOLファイルのファイル名を生成したい
Oracle
-
16
PL/SQLをWindowsのBATファイルで実行するには
Oracle
-
17
データを削除しても表領域の使用率が減りません
Oracle
-
18
Statement ignored というエラー
Oracle
-
19
不明なコマンドです(FROM")。行の残りは無視されました。 のエラー"
Oracle
-
20
バッチファイルを使用したsql@plusの実行及びログ出力について
Oracle
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
sqlplusでヘッダーが付かない
-
PL/SQLでSPOOLさせたいのですが...
-
sqlplusのspoolで空白行出現
-
DB2のSELECTでカンマ編集につい...
-
Statement ignored というエラー
-
Access VBAで行ラベルが定義さ...
-
Accessのマクロでモジュールを...
-
Accessの数値から時間に変換す...
-
キャッシュを使わずにSELECTを...
-
SQL*Plusの終了はquit?exit?
-
14桁の日付(YYYYMMDDHHMMSS)を...
-
PL/SQLカーソルの2重FORループ...
-
ストアドプロシジャからストア...
-
OutlookVBAで作成したマクロに...
-
ALTER SESSIONについて
-
SQL文のエラー
-
callで順に実行されるプロシー...
-
ACCESS2007インポート時の空白...
-
【Excel VBA】 WorksheetやRa...
-
Oracleで検索すると、フリーズ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
sqlplusでヘッダーが付かない
-
sqlplusのspoolで空白行出現
-
PL/SQLでSPOOLさせたいのですが...
-
DB2のSELECTでカンマ編集につい...
-
全角空白のTRIMができない...
-
SQLの結果に納得できません。ど...
-
オラクル10gで開発を行ってい...
-
MySQLの関数でCHARと言うのがあ...
-
SPOOLのファイル名
-
AL32UTF8でJIS第三水準文字を挿...
-
セッション数(ピーク)の履歴
-
Accessのマクロでモジュールを...
-
Statement ignored というエラー
-
Access VBAで行ラベルが定義さ...
-
キャッシュを使わずにSELECTを...
-
callで順に実行されるプロシー...
-
ODBCリンクの際にACCESSでは読...
-
SQLserver算術オーバーフロ...
-
重複するIDのデータを1行にま...
-
Accessの数値から時間に変換す...
おすすめ情報