• ベストアンサー

SQL*Loaderでのゼロ埋め

SQL*Loaderでデータを取り込む際に、対象データの左桁をゼロ埋めにする方法を教えてください。 例えば、取り込み対象の項目が、5桁未満の場合はゼロ埋めを行う。 ・取り込み対象:111 ・ゼロ埋め後の結果:00111(この値を取り込む) 上記を実装する方法が分からず困っております。 SQL*Loaderは初めて使用するため、調べる方法も見つけられませんでした。 何か良い方法がありましたら、お教え願えないでしょうか。 また、上記を実装するための参考になるサイト等を教えていただけないでしょうか。 よろしく御願い致します。

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

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

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

左に文字列を追加するLPAD関数があります。 http://download.oracle.com/docs/cd/E16338_01/server.112/b56299/functions095.htm#sthref1253 SQL*Loaderの制御ファイルのフィールドリストでは関数を使用することができます。 http://download.oracle.com/docs/cd/E16338_01/server.112/b56303/ldr_field_list.htm#i1008150 ですので、 項目名 "LPAD(:項目名,5,'0')" と記述すればいいです。

neetplease
質問者

お礼

とても親切なご回答ありがとうございます。実装できました。。

関連するQ&A

  • 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-LOADERの逆のもの

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

  • 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 Append

    SQL*Loaderのコントロールファイル内のパラメータ設定についてですが、 ネットで調べた結果 ロード方法をAPPENDとすると既存データがある場合は新しい行として追加とあるのですが、 これはテーブルのPKが重複していても新しく行がついかされるということでしょうか? 逆にREPLACEはPKが重複しているデータに上書きされるということでしょうか? よろしくお願いいたします。

  • データ削除と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を使用して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 数値のロード

    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の際に固定長ファイルの桁数をチェックすることは可能でしょうか? 上記を行いたい理由は固定長ファイルで取り込む際に、行ごとに桁数をチェックをし、何桁以外ならエラーとしてはじくという処理を行いたいからです。 Oracleのバージョンは9iです。 よろしくお願いします。

  • SQL*Loaderでのsysdate使用

    SQL*Loaderを使用してデータロードする際に、「更新日時」項目にsysdateでシステム日付を返すようにしているのですが、更新日時がTIMSTAMP型の場合に時間まで設定されません。 時間まで設定するにはどのように指定したらよいでしょうか?よろしくお願いします。

  • 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フィールドを使用して、複数のテーブルフィールドを更新可能か? ということです。また、そのときの制御ファイルのフィールド項目の定義はどのように記述したらよいのでしょうか? よろしくお願いします。