- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel VBA で Oracle CLOB型カラムの文字列を取得する方法)
Excel VBAでOracle CLOB型カラムの文字列を取得する方法
このQ&Aのポイント
- Excel VBAを使用して、Oracleに格納されているCLOB型の文字列を取得する方法について教えてください。
- Number型やVarchar2型のカラムからは問題なく取得できるようになったのですが、CLOB型で文字列を格納しているカラムからの取得でつまずいています。
- 自分の書いた方法だと、1600バイト以上の文字列が格納されているとエラー文字が返ってきてしまいます。これ以上の文字数を取得する方法について教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>1600バイト以上の文字列が格納されていると 本当に1600バイトジャストで起こりますか? GetChunk(0, 3263) で、チャンクサイズを3263バイト取ってあるのがまずいような気がします。 http://www.shift-the-oracle.com/element/data-type/data-type-inside.html を見ると分かるように、CLOB型の内部データ型は2バイト固定文字列ですので この指定方法だと3263が奇数なので、2バイト文字を途中で割ってしまいまい、取り出せないのではないでしょうか。 従って3262バイト(=1631文字)までは大丈夫で、それ以上の文字列が格納されている場合は最後にゴミがついてくるため怒られると思います。 GetChunkメソッド http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/win.102/B25023-01/sermthod.htm#CIHGIFFD ※第2引数は文字数ではなくバイト数です
お礼
piyo2000 様の回答を基に修正することで動作しました! ありがとうございます! >本当に1600バイトジャストで起こりますか? 大まかな確認しかしておりませんでした…。 改めて確認してみたところ、(後述頂いたご指摘通り)1632文字が境界値でした。 >CLOB型の内部データ型は2バイト固定文字列です 完全に誤認していました…。 更に、今回、対象カラムに格納する文字列が半角英数だけだったため、勝手に「文字数=バイト数」と思い込んでいました。 >※第2引数は文字数ではなくバイト数です 上記の思い込みもあって未確認でした…。 今回、対象カラムに格納する最大桁数が「3264文字」なのですが、substr的な使い方と混同して、「GetChunk(0, 3263)」と書いておりました。 これを「1文字=2バイト」と換算して、以下のようにする事で問題なく文字列を取得できるようになりました。 >GetChunk(0, 6528) ご丁寧に、ご指摘・ご教示頂きまして大変助かりました…。 本当にありがとうございました! リンク先もとても勉強になりました。 今後も参考にさせて頂きたいと思います。