「これはヤバかったな」という遅刻エピソード

あるファイルを行ごとに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
)

A 回答 (3件)

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バイト手前で
切り取られます。
    • good
    • 0

これではだめですか?



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

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

substrb関数でできませんか?

この回答への補足

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
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


おすすめ情報