• ベストアンサー

sqlldrの使用方法について

Oracleについて質問です。 sqlldrでデータをロードする際に、入力ファイルのレコードの終端文字を 指定できます。デフォルトは改行コードとなっていますが これを「@改行コード」にしたいのですがどうすればよろしいでしょうか。 具体的には、 infile '入力ファイル名' "str 'XX'" XXの箇所を「@と改行コード」としたいのですがうまくいきません。 お手数ですがご教示願います。

  • Oracle
  • 回答数1
  • ありがとう数15

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

  • ベストアンサー
  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.1

単純に infile '入力ファイル名' "str '@\r\n(か@\n)'" でダメですか?

aikibon
質問者

お礼

回答ありがとうございます。 \nではなく、\r\nと設定したらうまくいきました。

関連するQ&A

  • SQL*LoaderのDATA引数

    Shellからsqlldrコマンドを実行する際に複数のロードファイル名を引数として渡したい。 しかし、コマンドラインから実行する際にデータ引数は複数指定できないと言われます。 ということは、制御ファイル内のINFILEに複数ファイル名を指定しないといけないと思うのですが、 ロードファイル名は固定ではなく、複数の場合もあれば1つの場合もあります。 詳しく説明させていただきますと、Shellで他のFTPサーバーから取得したCSVのフルパスをすべて取得しそれを制御ファイルのINFILEに渡したいのです。 なにか良い方法はありますでしょうか? ご存知の方がいればご教示いただきく存じます。 よろしくお願いいたします。

  • SQL*Loaderの制御ファイルについて

    改行を含むデータをLoaderで投入したいのですがうまくいく方法を伝授ください。 レコードは以下です。先頭のみ"無し、末尾は","<CRLF> 3カラム目の先頭が半角スペースで、<CRLF>がきてXXXというデータです。 いろいろ試しましたが、どうもうまくいきません。 このデータをエラー無くロードできる方法はないでしょうか? ご教授ください。 ◆CSVレコード 99999","a-1"," <CRLF>Name-A あいうえお","<CRLF> ◆制御ファイルは以下指定 LOAD DATA INFILE XXX.CSV "STR x'0D0A'" APPEND CONTINUEIF LAST != '"' INTO TABLE table_name FIELDS TERMINATED BY '\",\"' TRAILING NULLCOLS ( COL1, COL2, COL3 ) ちなみに3カラム目が<LF>だとうまくいきます。。。

  • 固定長のデータをmysqlで取り込む方法

    実は、かなり悩んでいるため、助けて(教えて)いただけないでしょうか? なおMysqlのバージョンは5.5.31です。 ・hoge_test.txtの中身 011010000000009     043.052927141.3446931 011000000000009     043.059576141.3581841 011010010000009     043.036466141.3242842 011010010010009     043.038999141.3229683 0110100A0020009     043.037663141.3252133 0110100E0030009     043.037048141.3238143 ※真ん中の     の部分は2バイトの空白5文字。。。 先頭の11桁分は、数字+A~Z、 test6とtest7にあたる部分には、43.059576や141.358184などといった 小数点(少数6桁)のデータがあります。 といったhoge_test.txtの固定長のデータ(改行コードCR/LF)があるとき、 CREATE TABLE `hoge_test`.`hogehoge` ( `test1` varchar(11) DEFAULT NULL, `test2` varchar(3) DEFAULT NULL, `test3` varchar(1) DEFAULT NULL, `test4` varchar(5) DEFAULT NULL, `test5` varchar(1) DEFAULT NULL, `test6` varchar(9) DEFAULT NULL, `test7` varchar(10) DEFAULT NULL, `test8` varchar(1) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC; 上記のように定義して、以下のような形で取り込んでみました。 ※小数点部分はDOUBLEを使うのもありですが・・・うまくいかなかったので文字列として取り込むことに set character_set_database=sjis; LOAD DATA LOCAL INFILE "hoge_test.txt" INTO TABLE hoge_test.hogehoge FIELDS TERMINATED BY '' OPTIONALLY ENCLOSED BY '' LINES TERMINATED BY '\r\n' ; 上記を実行すると、こんな感じのような形となります。 '01101000000', '271', '6', '1', '', '', '', '' これを以下のようにしたいのですが、 そももそLOAD DATA で、このような固定長データを読み込むは難しいのでしょうか? オラクルでいうところのPOSITION句で各項目のレコード上の位置を指定はできないのでしょうか? http://oracle.se-free.com/utl/C2_kotei_load.html それとも単純に私の定義や取り込む方法がマズイのでしょうか?(だから取り込めないんだと思っていますが。) 最終的に、どうしたいかというと、以下のような形で、各カラムにデータが入ればOKです。 '01101000000','000','9','     ','0','43.052927','141.344693','1' そのままLOAD DATAで取り込みたいですが、この際元データをsedなどのlinux系標準のコマンドで カンマ区切りやタブ区切りに変換して、LOAD DATAで読み込んでも構わないです。 (ただエクセルで操作してというのは無しでお願いします。) ※データ量としては、200M単位です。 hoge_test.txtを sedで○○○○○で置き換えて、定義とLOAD DATAで、○○○○○で こういう風に○○○○○書けば取り込めばできるよ みたいな形でコードを教えていただけると助かります。 お手数をおかけいたしますが、よろしくお願いいたします。

  • テキストファイルに改行コードを付加してレコードを分割したい。

    テキストファイルに改行コードを付加してレコードを分割したい。 MSDOSテキストファイルで、1レコードのサイズが128バイトのテキストファイルが あるのですが、レコード間に改行コードがありません。 レコード10件なら1280バイト 20件なら2560バイトのファイルです。 これを128バイトごとに改行コードを付加できるようなソフトはないでしょうか? ファイル分割ではなく、レコードの分割ができる物を探しています。 よろしくお願いします。

  • 1レコードからなるファイルを複数レコードに分割

    可変長の1レコードのみのファイル(固定長のレコードが改行コードなくつながっている)をもとにして、固定長のcsvファイルを作成する方法をお教えください。 具体的には、 項目A(10バイト)、項目B(5バイト)、項目C(20バイト)からなる35バイトのデータが改行コードなくつながっている50000バイトくらいの1レコードを入力して、項目A,B,Cから1レコードが構成されるcsvファイルを作成したいと思います。 よろしくお願いします。

  • SQLLDRで、10M程度のテキストの流し込み

    SQLLDRで、10M程度のテキストの流し込みを行おうとすると、 レコード1: 拒否されました。- 表DATATABLE,列DATABUFFでエラーが発生しました。 データファイルのフィールドが最大長を超えています となってしまいます。 insert文で行うと問題なくinnsertできています。 制御ファイルなどの記述が悪いのでしょうか? 制御ファイルは、 OPTIONS(LOAD=-1,SKIP=0,ERRORS=-1,ROWS=-1) LOAD DATA INFILE 'data.csv' BADFILE 'data.bad' APPEND INTO TABLE DATATABLE FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY "'" TRAILING NULLCOLS ( DATABUFF ) ご教授ください。 よろしくお願いします。 環境:Oracle10GR2+Linux

  • 多重insertについて

    お世話になります。 MySQLの経験はありますが、Oracleは初心者です。 Oracleで「多重insert」を行いたいと思っています。 この表現が正しいか分かりません、一度のinsert文で 多数のレコードを追加したいと思っております。 MySQLですと、 insert into XXXX values(X,'XX'),(X,'XXX'),(X,'XXX') のように、()と,で区切って一度の複数のレコードを インサートできますが、Oracleでは出来ませんでした。 Oracleで同様の動作を行う方法はあるのでしょうか? お手数をおかけ致しますが、よろしくお願い致します。

  • テキストファイルの入力について教えてください。

    可変長レコードのテキストファイルを1レコードずつ読み込んで処理をしたいと思っています。 改行コードで区切られているので、line inputで読み込もうとしていますがうまくいきません。 テスト用に入力ファイルを小さくするとうまくいくのですが、目的のファイル(180MB)を読み込もうとするとフリーズしたような状態になってしまいます。 どうすればよいかお知恵を拝借できないでしょうか。 EXCEL2003 VBAです。 よろしくお願いいたします。

  • Macintosh環境でテキスト文字 \ を認識する方法を教えて欲しいです

    Macintosh環境において、S-JISフォーマットの、テキストファイル text.txt を読み込み、テキストで記述された改行コード変換するactionスクリプトを考えたいと思っております。 そこで、以下のようなスクリプトをつけたムービークリップを作りました。 onClipEvent (load) {   // テキストファイルの読み込み   System.useCodepage = true;   this.loadVariables("test.txt"); } on (release) {   // 改行文字を認識してメッセージに改行を追加   str = new String(text);   str = str.split(String.fromCharCode(92,110)).join("\n");   str = str.split(String.fromCharCode(92,114)).join("\n");   str = str.split("\\n").join("\n");   str = str.split("\\r").join("\n");   _root.DOCS= str; } 用意したtext.txtの内容は以下の通りです: &text=この先にnの改行があります\nこの先にrの改行があります\r¥¥n→\\n  ¥¥r→\\r& これを実行してみたところ、 ・Windows環境(FLASH7 & FLASH8)では_root.DOCSは以下のように表示されました: この先にnの改行があります この先にrの改行があります ¥¥n→\   ¥¥r→\ ・Macintosh環境(FLASH7 & FLASH8)では_root.DOCSは以下のように表示されました: この先にnの改行があります\nこの先にrの改行があります\r¥¥n→\\n  ¥¥r→\\r どうもMacintosh環境では、テキストの \ の認識が、split命令内では String.fromCharCode(92) や "\\" では認識しないのではないかと考えております。 この動作をMacintoshで実現する為には、どのように表記すればよろしいでしょうか。 良い案をおもちの方がおられましたら、是非御教授御願いできませんでしょうか。 よろしく御願い致します。

    • ベストアンサー
    • Flash
  • 文字コードMS932(Windows-31J)のテキストファイル(CS

    文字コードMS932(Windows-31J)のテキストファイル(CSVファイル)を、 MySQLのLOAD DATA INFILEでインポートしたところ、 漢字などの全角文字が文字化けしてしまいました。 その後、MySQL上で「show variables like 'character_set_database'」を SQL実行したところ、「utf8」と表示された為、 試しに、 元のCSVファイル自体の文字コードを、 テキストエディタで「UTF-8」に変換したCSVファイルを、 MySQLのLOAD DATA INFILEでインポートしたところ、 うまくインポート出来ました。 そこで、ご質問内容ですが、 MySQLのLOAD DATA INFILEでインポートする際に、 文字コードMS932(Windows-31J)のテキストファイル(CSVファイル)を、 直接、文字コードUTF-8のテキストファイルとして、 読み込ませながらインポートするような方法が、 もしございましたら、ぜひ教えてください。 もし、それが無理でしたら、 上記の文字コード変換する方法として、 どのような方法があるかなどをアドバイスいただけましたら幸いです。 お世話になります 宜しくお願い致します。

    • ベストアンサー
    • MySQL