• ベストアンサー

項目内の改行がレコードの終わりと判定されてしまう

SQL*PLUSでORACLEデータを単純にテキストファイルに書き出したいのですが、項目内に「改行」があるとレコードが複数行に分かれていまい、上手くいきません。 項目内の「改行」のみ(レコード終端の本来の「改行」は残す)を削除して前詰めする(または空白に置き換える)方法をご存じの方ご教示いただけないでしょうか。 例) SET COLSEP ',' SPOOL D:\出力ファイル.txt SELECT      項目1 || 項目2 || 項目3 FROM テストテーブル ; SPOOL OFF;

  • Oracle
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • thatsthat
  • ベストアンサー率55% (15/27)
回答No.2

すみません。訂正です >(DB中の改行コードがcrのみなら、 「lfのみなら」です。

KURO_0720
質問者

お礼

ご教示いただいた方法で問題解決できました。 貴重な情報を賜りまして誠にありがとうございました。

その他の回答 (1)

  • thatsthat
  • ベストアンサー率55% (15/27)
回答No.1

面倒臭いですが select replace(replace(項目1||項目2||項目3,chr(13),''),chr(10),' ') from ・・・ のような形で、とりあえず出来ると思います。 (DB中の改行コードがcrのみなら、 replaceはchr(10)についてだけで良いです。)

関連するQ&A

  • 置換変数が再利用できない

    OracleのSQL*Plusで、&を使った置換変数を利用していますが、 「&&」にしても、毎回値の入力を求められます。 何が悪いのかわかりません。 どなたか教えてください。宜しくお願いします。 ---TEST.sql------------------------------- SET PAGES 0 SET COLSEP ',' SET LIN 1000 SET Trimspool on SPOOL c:\work\testresult.txt SELECT * FROM temp WHERE module_DATE BETWEEN '&StartDT' and '&EndDT'; SELECT * FROM temp2 WHERE module_DATE BETWEEN '&&StartDT' and '&&EndDT'; SPOOL OFF ------------------------------------------

  • sqlplusのspoolで空白行出現

    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" -----

  • 1レコード全てを改行なしで表示させる方法

    お世話になっております。 select文で1レコード全てを抽出したいのですが、set lineで設定できる長さを超えているようで、1レコードが改行されてしまいます。 文字列の項目から空白を削除などしても、項目名(下記の(1))が長くとられるため、あまり意味がありません。 ※項目名とは、各フィールドのタイトルです。       ID   RTRIM(MOJIRETSU) ← (1) -----  ------------------------- たぶん、この項目名(1)をmaxlength文だけの長さ表示することができれば、改行しないで1レコードが表示できると思います。 項目名(1)の長さを短くする方法を教えて頂けないでしょうか。 よろしくお願いします。

  • OracleでCLOB型をファイル出力したい

    Oracle10gで、CLOB型を含むテーブルを全件ファイル出力しているのですが、CLOB型の項目は正常に出力されず、項目の内容が80byte位で切れてしまいます。 項目の内容が切れずにファイルに出力できる方法が知りたいです。 宜しくお願い致します。 ファイル出力の内容は以下の通りです。 ########################################################## set pages 0 set heading off set colsep '<ec>' set lines 3000 set feed off set trimspool on set define off set num 20 spool テーブル名.dat select /* FULL(テーブル名) */ 項目A,項目B,・・・・ from テーブル名; spool off ########################################################## ※項目は、全部で15項目あり、レコード長は135です。

  • PL/SQLでSPOOLさせたいのですが、可能でしょうか?

    PL/SQLにてSPOOLにてSELECTの結果を ファイル出力させたいのですが、 (下記のような感じです。) エラーとなってしまいます。 そもそも、PL/SQLにてSPOOLは使用可能なのでしょうか? 例) declare  begin   spool c:\test_spool.dat    select * from dual;   spool off end; この例では 「PLS-00103: 記号"C"が見つかりました。」という エラーメッセージがかえってきます。。。 出力ファイルの指定のしかたが悪いのでしょうか? ご教授いただければ幸いです。 DBはOracle9iです。

  • テーブルレイアウトの差異

    SQL*Plusでテーブルの構造を表示するDESCを使って、結果をSPOOLする際に csvファイルにしたいと思い SET HEADING OFF SET COLSEP "," SPOOL C:\WINDOWS\デスクトップ\スプール結果.txt DESC テーブル名 SPOOL OFF と実行してもカンマ区切りにならないのですが、DESCのときは出来ないのですか? Oracle for Windows 95のSQL*Plus Ver3.3.3.0.0を使用しています。 また、テーブルの構造の差異を見つける作業を行ないたいのですが、 効率の良い方法もしくはフリーソフトをご存知の方情報お願いします。 この質問がメインかな?

  • BLOB型項目をSQLの検索条件に指定して検索したいのですが。

    BLOB型の項目を持つTableに対して、SQLのSELECT文でBLOB型項目がNull(未設定)のレコードを抽出したいと思っています。 どのようなSELECT文を組めば良いのでしょうか? 方法がわからず困っています。 御教授下さい。 DBはOracle8.1.6、 OSはWindowsサーバ2003です。よろしくお願いします。

  • バッチからのSQLPLUS実行について

    はじめまして。 SQLPLUSでご質問ををさせてください。 環境 OS:Win2003server Oracle:10g バッチから、以下のようにSQLを実行したいと考えています。 バッチファイル sqlplus ID/PASS@インスタンス名 @SQLファイル.sql SQLファイル.sql set trimsool on set pagesize 0 set linsize 2000 set feedback off set colsep ',' spool on spool ABC.txt select * from xxx; spool off exit; ご質問  バッチファイルからSQLファイル.sqlが呼ばれているのですが、  接続時にENTERキーを押下しないと、後続の処理が実行されません。  ENTERキー押下後のメッセージ内容が  「バージョン情報の表示や、接続されました。」と出力されているため、  接続時の処理と思われます。    上記でENTERキーを押下せずに、処理を実行させるためにはどうすればよろしいでしょうか。  初歩的な質問で申し訳ありませんが、宜しくお願い致します。

  • 重複レコードの取得

    すみません。。重複レコードの取得方法に困っています。 やりたいのは以下です。 テーブルA 項目1| 項目2| 項目3| 11 | 11 | 01 | 12 | 11 | 02 | 13 | 11 | 04 | 14 | 11 | 04 | 上記の項目1は主キーです。 抽出したいのは下記のみです。 項目1| 項目2| 項目3| 13 | 11 | 04 | 14 | 11 | 04 | 色々SQLを組んで試しては見てるのですが。。。。 select * from テーブル where ((項目3) in (SELECT 項目3 FROM テーブル GROUP BY 項目3 having count(*)>1)) 上記SQLだと項目3を主キーごとにカウントしてるみたいなので 意図した結果が抽出されないのです・・・・・。 項目2と項目3を結合して重複のチェックをすればよいのか?? とも思いますがSQL自体が1本で完結したいので よく分からなくなってしまいました。。。。。 皆さんご教示宜しくお願い致します。

  • レコードが選択されないときの、置換ができません

    select max(COL_1) from TBL where COL2 = 'hoge'; というようなSQLがあり、この条件での選択されるレコードが存在しないとき max(COL_1)の値を"0"(ゼロ)にしたいのですが。。。 select nvl(max(COL_1),NULL,0) from TBL where COL2 = 'hoge'; と修正しても結果は変わらず「レコードが選択されませんでした。」 となってしまいます。 他にdecodeや、countも試したのですが、力量不足のため、上手くいきません。。 どなたかご教授願います。 Oracle 9i で SQL*Plus 使用しています。