こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SQL*Loader 

あるファイルを行ごとにDBにロードしています。
今回の修正で、検索条件を追加したのですが、
全角と半角が混在していて、671~672が全角だと
マルチバイト・キャラクタでエラーが発生してしまいます。

この場合は670までしか取り込まない処理に
したいのですが、その方法をご教授ください

よろしくお願いします。

LOAD
APPEND
PRESERVE BLANKS
INTO TABLE ユーザ検索情報 (
組織コード POSITION(1:7),
実行開始日 POSITION(8:15),
問合せ開始時刻_時 POSITION(16:17),
問合せ開始時刻_分 POSITION(18:19),
問合せ開始時刻_秒 POSITION(20:21),
実行終了日 POSITION(22:29),
問合せ終了時刻_時 POSITION(30:31),
問合せ終了時刻_分 POSITION(32:33),
問合せ終了時刻_秒 POSITION(34:35),
問合せ時間 POSITION(36:41),
テーブル名 POSITION(42:71) "TRIM(:テーブル名)",
検索条件  POSITION(72:671) "TRIM(:検索条件)",
DWH登録日時 SYSDATE
)

投稿日時 - 2005-06-14 09:47:01

QNo.1448282

すぐに回答ほしいです

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

SQL*LOADERのSQL文字列は、関数の使い方に癖があるので、
何処までできるか不明なのですが...

検索条件  POSITION(72:671) "TRIM(:検索条件)",

検索条件 POSITION(72:672)
"substrb(:検索条件,1,decode(length(substrb(:検索条件,1,600)),length(substrb(:検索条件,1,601)),599,600))",

に変えてみてください。

通常のSQLと同じ評価がされるなら、感じの泣き別れを意識して、1バイト手前で
切り取られます。

投稿日時 - 2005-06-17 03:08:19

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

これではだめですか?

検索条件 POSITION(72:※1) "SUBSTR(:検索条件, 1, 600)"

※1は671でエラーになるなら、ファイルレイアウト上の本来の値をセット

投稿日時 - 2005-06-15 18:52:55

ANo.1

substrb関数でできませんか?

投稿日時 - 2005-06-14 10:23:29

補足

substrb関数でできそうですが、
取り出すファイルの一行 (※の部分)
をどのように表記すればよいでしょうか?

LOAD
APPEND
PRESERVE BLANKS
INTO TABLE ユーザ検索情報 (
組織コード POSITION(1:7),
実行開始日 POSITION(8:15),
問合せ開始時刻_時 POSITION(16:17),
問合せ開始時刻_分 POSITION(18:19),
問合せ開始時刻_秒 POSITION(20:21),
実行終了日 POSITION(22:29),
問合せ終了時刻_時 POSITION(30:31),
問合せ終了時刻_分 POSITION(32:33),
問合せ終了時刻_秒 POSITION(34:35),
問合せ時間 POSITION(36:41),
テーブル名 POSITION(42:71) "TRIM(:テーブル名)",
検索条件  "substrb(※,72,671), "TRIM(:検索条件)",
DWH登録日時 SYSDATE
)

投稿日時 - 2005-06-14 11:21:50

あなたにオススメの質問