SQL*LOADER 最終列のLENが1

このQ&Aのポイント
  • SQL*LOADERの実行時に、最終列のLENが1になる事象についての原因と対処法を教えてください。
  • SQL*LOADERを使用してデータをロードする際、最終列のLENが1になってしまう問題が発生しています。この問題の原因と解決策について教えてください。
  • SQL*LOADER実行時に、最終列のLENが1となる現象が発生しています。この問題の原因と対処方法を教えてください。
回答を見る
  • ベストアンサー

SQL*LOADER 最終列のLENが1

お世話になります。 前提として 次のようなctlファイルがあります。 OPTIONS(ROWS=500,BINDSIZE=700000) LOAD DATA INFILE '/home/oracle/TEST/00_BIN/YOSAN.csv' TRUNCATE INTO TABLE MT_YOSAN ( 日付 TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"', 店舗コード TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"', 予算 TERMINATED BY ',' NULLIF 昨年実績=BLANKS, 昨年実績 NULLIF 昨年実績=BLANKS ) ロード対象のCSVですが、次のようなROWデータになります。 "2011/02/22","01010",30000,25000 テーブル仕様は次のようになっています。 日付      VARCHAR2(20) NOT NULL 店舗コード  VARCHAR2(20) NOT NULL 予算      NUMBER(10) 昨年実績   NUMBER(10) これを実行した際に昨年実績のカラムに25000の先頭の2しかロードされません。 ログファイルを開くと他のLenは*に対して最後の昨年実績列は1が設定されていました。 この事象の原因と対処法がわかる方がいればご教示いただきたく存じます。 よろしくお願いいたします。 またsqlldr実行時は引数controlとlogのみ指定しています。

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

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

  • ベストアンサー
  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

> 昨年実績 NULLIF 昨年実績=BLANKS の項目長の指定がないためです。 CSVデータの場合は「TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'」の指定は項目単位に行う必要はあまりありません。 制御ファイルの内容を OPTIONS(ROWS=500,BINDSIZE=700000) LOAD DATA INFILE '/home/oracle/TEST/00_BIN/YOSAN.csv' TRUNCATE INTO TABLE MT_YOSAN FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ( 日付, 店舗コード, 予算 NULLIF 昨年実績=BLANKS, 昨年実績 NULLIF 昨年実績=BLANKS ) にすればロードできます。

関連するQ&A

  • SQL*Loaderについて2

    SQL*Loaderを用いてOracleのテーブルにデータを格納しようと思っています。 格納するデータはテキストファイルです。 テキストファイルのデータはカンマ区切りになっているのですが、エラーとなってしまいます。 このテキストファイルをタブ区切りにすれば問題なく動くのですが、カンマ区切りでは無理 なのでしょうか? 現在作成のLoaderは下記になっています。 load data truncate into table DEPT fields terminated by X'09' trailing nullcols (DEPTNO ,POSTNO NULLIF POSTNO=BLANKS ,SAL NULLIF SAL=BLANKS ) 現在のデータは下記になっています。 1001,1234567,100000 1002,1234567,200000

  • SQL*Loaderをダイレクトモードで実行

    するにはどうしたらいいのでしょうか? 例えば以下の場合にダイレクトモードでSQL*Loaderするにはどうしたらいいのでしょうか? sqlldr sato/secret control=x.ctl ただし x_table: create table x_table(i number,s varchar(99)); x.ctl: LOAD DATA INFILE 'x.csv' APPEND INTO TABLE x_table FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' TRAILING NULLCOLS ( i,s ) x.csv: 1,"it is iti." 2,"it is ni." 3,"it is san."

  • SQL*Loaderについて

    SQL*Loaderを用いてOracleのテーブルにデータを格納 しようと思っています。 格納するデータはテキストファイルです。 しかし、NUMBER型にマイナスのデータ(-123.45)を格納 するとエラーになってしまいます。 原因としては、多分テキストデータの表示が"123.45-"と なっているからだと思います。 "123.45-"の表示でエラーとならずに"-123.45"と格納 されるようにすることは不可能なのでしょうか? 現在作成のLoaderは下記になっています。 load data truncate into table DEPT fields terminated by X'09' trailing nullcols (DEPTNO ,POSTNO NULLIF POSTNO=BLANKS ,SAL NULLIF SAL=BLANKS ) ちなみにSALがNUMBER型の項目です。

  • sql*loader 数値のロード

    SQL*LOADERにて NUMBER(3,0)のフィールドに、小数点以下を含む数値をもったデータをロードすると 四捨五入か何かされて整数でデータがロードされてしまいます。 テーブル、CTLファイル、csvレコード、登録結果は以下のとおりです。 テーブル: CREATE TABLE tbl1 ( CLM001 NUMBER(3,0) NOT NULL, CLM002 VARCHAR2(30) ) CTLファイル: LOAD DATA INFILE 'tbl1.csv' BADFILE 'tbl1.bad' TRUNCATE INTO TABLE tbl1 FIELDS TERMINATED BY ',' TRAILING NULLCOLS ( CLM001, CLM002 ) csvレコード: 0.9,aaaaa 3.1,bbbbb 登録結果(SQL*LOADER実行結果): 1,aaaaa 3,bbbbb 小数点を含むデータをロード時にエラーとしたいのですが、何かいい方法ありますでしょうか? 環境はSQL*Loader: Release 9.2.0.1.0になります。

  • SQL*Loaderで、データを加工してロードしたいです。

    SQL*Loaderを使ってデータをテーブルにロードしたいのですが、その際に、データを加工してロードしたいと考えております。 ◎使用するコントロールファイルのサンプル (項目1)(項目2)(項目3) 12345, abcde, ABCDE ◎使用するコントロールファイルのサンプル Load Data truncate Into Table "Sample" Fields terminated by ',' Optionally enclosed by '"' (  項目1,  項目2,  項目3,  項目4 EXPRESSION ":項目1(の下1桁)|| ' ' || :項目2(の下2桁)|| ' ' || :項目3(の下3桁)" ) まず、項目4には、項目1~3のデータを連結したものをロードしたいと考えております。 その際に、 項目4(6桁)="項目1の下1桁"+"項目2の下2桁"+"項目3の下3桁" となるようにしたいのですが、どのような関数を使ったらよいのでしょうか? また、連結する関数"EXPRESSION"とどのように組み合わせたらよいのか教えていただけないでしょうか? 思い当たる様々なキーワードでググってみたのですが、参考になるページを見つけることができませんでした。 「ヒントやるから自分で調べろ」みたいなお返事でも結構ですので、アドバイスをいただけますようお願い申し上げます。

  • SQLローダーCSV取込で、囲み文字がデータ中に入っている場合について

    SQLローダーCSV取込で、囲み文字がデータ中に入っている場合について お世話になります。 SQLローダーでCSV取込を行っています。 設定は下記のようになっており、区切り文字はコンマ  囲み文字はダブルコーテーションを指定しています。 LOAD DATA TRUNCATE CONTINUEIF LAST != '"' INTO TABLE WORKTABLE FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' TRAILING NULLCOLS ( data1 char, data2 char, data3 char ) このように取り込んだところ、下記のような行でエラーが発生しました。 「"data1","data2",""文字列,文字列""」 どうやら元々ダブルコーテーションで囲まれていたデータが CSV出力時にもう1度囲まれた状態のようです。 エラー内容 「TERMINATEDとENCLOSEDフィールドに続く終了記号がありません。」 原因はダブルコートであることはわかっています。 色々試したのですが、うまくいきません。 このデータをうまく取り込む方法はあるのでしょうか よろしくお願いいたします。

  • MySQLでCSV出力したい

    MySQL初心者です。 テーブルから抽出したデータを CSVにてエクスポートしたいです。 SELECT * FROM tbl_employee INTO OUTFILE "/ttt.csv" FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY "\r\n"; これだとフィールド名がエクスポートされないという現象が起こります。 また、エクスポート先なのですが、 デスクトップとかにしたいのですが、 設定の仕方がよくわかりません。 ネットで調べたのですが、限界でした。 まだまだ初心者なもので よろしくお願いいたします

  • ORA-00917エラーが発生する

    SQL*Loaderを使用してCSVファイルをテーブルにロードしたいのですが、 「ORA-00917 カンマがありません」というエラーが発生してしまいます。 制御ファイルやデータファイルのどこに問題があるのでしょうか。 ご教授願います テーブル定義 テーブル名 TB_HOGE ID varchar XML_DATA XMLType INS_YMD DATE USER VARCHAR CTLファイル OPTIONS(  ERRORS = 0 ) LOAD DATA CHARACTERSET UTF8 INFILE '/temp/foo/data.csv' INTO TABLE TB_HOGE APPEND XMLType(XML_DATA) FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"' TRAILING NULLCOLS (ID, XMLFILE FILLER CHAR, XML_DATA lobfile( XMLFILE ) terminated by EOF, INS_YMD "TO_DATA( :INS_YMD, 'YYYYMMDD')" USER) csvファイル data.csv ”No001","/temp/foo/xml/data1.xml","20150320","user1" ”No002","/temp/foo/xml/data2.xml","20150320","user1" よろしくお願いします。

  • SQL-Loaderが動かないです。

    みなさんこんにちは 作成されたデータをSQL-Loaderにてオラクルデータベースに取込み を行います。 下記にソースを書きましたが、まずTEST.batファイルを実行し、 TEST.bat側からTEST.ctlを実行し、TEST_WORKテーブルにデータを 格納します。 *****TEST.batの内容***** SQLLDR USERID=TEST1/TEST1@GUEST CONTROL=TEST.ctl LOG=LOG.txt ************************ *****TEST.ctlの内容***** LOAD DATA INFILE 'D:\test1.dat' TRUNCATE PRESERVE BLANKS INTO TABLE TEST_WORK FIELDS TERMINATED BY "|" TRAILING NULLCOLS (KOUMOKU1, KOUMOKU2, KOUMOKU3, KOUMOKU4) ************************ 実際にこれを実行した所、問題なく正常終了しました。 しかし、これをホスト側からFTPにて実行を行うと、 TEST.batが実行されません。もちろんログも出力されません。 ファイルが実行できてないので、ファイルのコピーを行う簡単 なバッチファイルを作成し、ホスト側から実行を行ってもらった 場合、こちらは問題ありませんでした。 となると、SQL-Loaderのソースに何か問題があるのでは?と 思いますが・・・色んなサイトでLoaderのソースを拝見しましたが、 見当がつかないです。 ソースを見て、気になる点や、同じ経験をされた方いらっしゃい ましたら、お知恵をお貸しください。 ちなみに、SQL-Loaderを実行するマシンのOSはWindows2000Proです。 よろしくお願いします。

  • BAT処理でCSVデータのインポート

    よろしくお願いしますm(__)m 昨日から調べて作ってみたのですがうまく動かず、 MYSQLが強制終了してしまうこともありました(T_T) 疲れました・・・ ※test.batに以下の内容を書きました c:\mysql\bin\mysql -u **** -p**** < test.sql ※test.sqlに以下の内容を書きました LOAD DATA INFILE "c:\mysql\test.csv" INTO TABLE 商品管理.商品単品 FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY "" ESCAPED BY "\\" LINES STARTING BY "" TERMINATED BY "\n" ※test.csvはカンマ区切りになっています。 ファイルは【test.bat】【test.sql】【test.csv】とも c:\mysqlに置いています。 この状態でtest.batを実行するとDOS窓が一瞬現れて消えて しまいます。 間違っているところやヒントなどあれば教えてくださいm(__)m

    • ベストアンサー
    • MySQL