SQL*LoaderでCSVをインポートする際のフィールド編集について

このQ&Aのポイント
  • SQL*Loaderを使用してCSVファイルをインポートする際、別のフィールドにデータを編集することは可能ですか?具体的には、CSVデータのDENPYO_NOフィールドの左4桁を取得して別のフィールドにインポートしたいと考えています。
  • 複数のテーブルフィールドを更新するために一つのCSVフィールドを使用することは可能か?制御ファイルのフィールド項目の定義はどのように記述すればよいでしょうか?
  • SQL*Loaderを使用してCSVファイルをインポートする際、DENPYO_NOフィールドの左4桁を別のフィールドに編集してインポートする方法や、制御ファイルのフィールド項目の定義について教えてください。
回答を見る
  • ベストアンサー

SQL*Loader 別フィールドのデータを編集

SQL*LoaderでCSVをインポートする際に、 次のようなCSVデータがあるとします。 DENPYO_NO | SALES_QTY | PRICE  1001-01-0001     1      2000 1001-01-0002     2      4000 このデータのDENPYO_NOフィールドの左4桁を取得して別のフィールドにインポートすることは 可能でしょうか? 説明がわかりにくいと思いますが、テーブルに取り込んだ時に以下のようにしたいです。 SECTION | DENPYO_NO | SALES_QTY | PRICE 1001     1001-01-0001     1      2000 1001     1001-01-0002     2      4000 要は一つのCSVフィールドを使用して、複数のテーブルフィールドを更新可能か? ということです。また、そのときの制御ファイルのフィールド項目の定義はどのように記述したらよいのでしょうか? よろしくお願いします。

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

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

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

可能です。 フィールドリストを ( DENPYO_NO, SALES_QTY, PRICE, SECTION "substr(:DENPYO_NO,1,4)" ) このように定義すればいいです。

anman0201
質問者

お礼

ご回答ありがとうございます。 教えていただいた方法でロードできました。 本当にありがとうございます。

関連するQ&A

  • SQL*LOADER実行時のロードデータチェック

    Sql*Loaderを使用してCSVファイルを取り込む際に、取り込むCSVデータが5桁以上の場合はエラーとしたいのですが。 制御ファイルにどのような記述をすればよいかわかりません。どうか、ご教授お願いいたします。 ちなみに 5桁未満の場合は、0埋めを行っております。 具体的には、以下のような結果を出したいのですが。 ○ 1   ⇒ 00001(0埋めして取り込む) ○ 00001 ⇒ 00001(取り込む) ○ 00000 ⇒ 00000(取り込む) × 000001 ⇒ (取り込まない) ------------------------------------------------------------- 現状、以下のソースだと「1234567」のCSVデータをロードすると、 「34567」で取り込まれてしまいます。(エラー発生しない。) 【Sql*Loaderの制御ファイル】 LOAD DATA   (省略) TRUNCATE TRAILING NULLCOLS ( No_colum "LPAD(:No_colum,5,'0')" , No2_colum "LPAD(:No2_colum,5,'0')" ) 【tmp_tableの情報】 カラム:No_colum vchar2(サイズ:5) カラム:No2_colum vchar2(サイズ:5) ------------------------------------------------------------- どうか、ご教授よろしくお願いいたします。

  • SQL*LoaderでCSVから指定した列のみインポートしたい。

    SQL*Loaderを用いてOracleのテーブルにデータを格納 しようと思っています。 格納するデータはカンマ区切りのCSVファイルです。 入力CSVファイルは他テーブル用のファイルなので、 ローダーで落とし込むテーブルとは列数が異なります。 ですので、「CSVの5列目の値をテーブルのAA_NOというフィールドに 格納する。ということが可能なのでしょうか?」 CSVファイルのある行が a,b,c,d,e,f というデータの場合、テーブルには a,e,f とインポートしたいのです。 よろしくお願いします。

  • データ削除とSQL*Loaderでのインポート

    SQL*Loaderを使ってデータをインポートするのですが、既存データが存在するテーブルにインポートするため、実行前に、条件に一致する一部のデータを削除します。 ですが、SQL*Loaderでインポートが失敗した際には、元に戻したいと思っています。 そういう場合に、SQL*PlusからDELETEのSQL文を実行してから、SQL*Loaderを起動してインポートするとなると、SQL*Plusから抜けた時点でCOMMITされてしまいますよね?そのためSQL*LoaderでインポートがエラーになってROLLBACKされても、削除されたデータは元に戻らないですよね・・・。 全件削除なら、CTLファイル内でREPLACEを指定してインポートするのですが・・・ データの一部削除とSQL*Loaderでのインポートを一連の処理として、エラーの際にはROLLBACKさせられる方法はありますでしょうか? よろしくお願いします。

  • 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の制御ファイル内で、 以下のような日付データを変換するにはどうしたらよいでしょうか? ・2010-12-06 00:00:00.000 以前は'2010-12-06 00:00:00'の形式だったので "to_char(to_date(:DENPYO_DATE,'YYYY-MM-DD HH24:MI:SS'),'YYYYMMDD')" のようにして変換が可能だったのですが、仕様変更がありましてこれに対応しなければいけなくなりました。 ちなみに安易な考えで以下のようにしたのですがさすがにだめでした... "to_char(to_date(:DENPYO_DATE,'YYYY-MM-DD HH24:MI:SS.000'),'YYYYMMDD')" 方法をご存知の方がいれば是非、ご教示いただきたく存じます。 よろしくお願いいたします。

  • SQL-LOADERの逆のもの

    先日SQL-LOADERについて質問させてもらいましたが、もう1つ教えて欲しいことがあります。 SQL-LOADERの逆のものはないのでしょうか? 200万件のテーブルのデータを、条件毎に高速エクスポート(固定長テキスト)したいのですが。 つまりSQL-WRITERというものは無いかな~、、、と、、、(笑) 最悪、PL/SQLで200万件をまわして、テキスト出力させようと思っていますが、多分時間が相当かかると思うので、、、、 なにか良い方法があったら教えてください。

  • SQL*Loaderでexcel内のデータロード

    Oracle初心者です。 掲題の通りなのですが、 excelのファイル内に記述されている表の データをSQL*Loaderでロードするには どうすればいいのでしょうか? まずexcelの表をcsvファイルにすればよいと思うのですが、csvファイルへの仕方がわかりません… 初歩的な質問ですが、よろしくお願いします。

  • SQL*Loaderでのデータロード

    SQL*Loaderでデータロードを実行するとき ロードするテキストファイルのある列の部分が スペースのとき、テーブルで設定したデフォルト値 をロードさせたいのですが、どうCTLファイルで記述 すればよいのですか? 教えてください。おねがいします。

  • 現在、VBAにてUNICODEのCSVを出力し、SQL*Loaderで

    現在、VBAにてUNICODEのCSVを出力し、SQL*Loaderでテーブルへ取り込む処理を作成しています。 そこで、文字コードについて質問があります。 作成したCSVで、IBMフォーマットの全角マイナスとWindowsの全角マイナスが あります。これをSql*Loaderにてテーブルへ取り込むと、Windowsの全角マイナスが IBMの全角マイナスへ変換されてしまいます。 これはSql*Loaderの仕様でしょうか? IBMの文字コードは、E28892(&H2212)、Windowsの文字コードは、EFBC8D(&HFF0D)です。 Sql*LoaderのCONTROLファイルでCHARACTERSETをUTF16にしています。 宜しくお願いします。

  • 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型の項目です。