- ベストアンサー
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 )
- みんなの回答 (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バイト手前で 切り取られます。
補足
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 )