
Excel VBA を使用して、Oracleに格納されている文字列を取得しようとしています。
Number型やVarchar2型のカラムからは問題なく取得できるようになったのですが、CLOB型で文字列を格納しているカラムからの取得でつまずいています。
自分の書いた方法だと、1600バイト以上の文字列が格納されているとエラー文字が返ってきてしまいます。
これ以上の文字数を取得する方法について教えてもらえないでしょうか?
'---// コード抜粋 ココから //---
'ORAセッション生成
Set OraSession = CreateObject("OracleInProcServer.XOraSession")
'ORADB生成
Set OraDatabase = OraSession.OpenDatabase(<<dbname>>, <<id>> & "/" & <<passwd>>, 0)
Dim SQL As String '一覧取得用SQL
Dim RS As Object 'レコードセット
SQL = " SELECT <<<clob_col_name>> FROM <<table_name>> "
Set RS = OraDatabase.DbCreateDynaset(SQL, 0&)
Range("A1").Value = RS.fields("<<clob_col_name>>").GetChunk(0, 3263)
RS.Close
'---// コード抜粋 ココまで //---
環境は、Excel 2003、Oracle 9iです。
ひとつよろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
>1600バイト以上の文字列が格納されていると
本当に1600バイトジャストで起こりますか?
GetChunk(0, 3263)
で、チャンクサイズを3263バイト取ってあるのがまずいような気がします。
http://www.shift-the-oracle.com/element/data-typ …
を見ると分かるように、CLOB型の内部データ型は2バイト固定文字列ですので
この指定方法だと3263が奇数なので、2バイト文字を途中で割ってしまいまい、取り出せないのではないでしょうか。
従って3262バイト(=1631文字)までは大丈夫で、それ以上の文字列が格納されている場合は最後にゴミがついてくるため怒られると思います。
GetChunkメソッド
http://otndnld.oracle.co.jp/document/products/or …
※第2引数は文字数ではなくバイト数です
piyo2000 様の回答を基に修正することで動作しました!
ありがとうございます!
>本当に1600バイトジャストで起こりますか?
大まかな確認しかしておりませんでした…。
改めて確認してみたところ、(後述頂いたご指摘通り)1632文字が境界値でした。
>CLOB型の内部データ型は2バイト固定文字列です
完全に誤認していました…。
更に、今回、対象カラムに格納する文字列が半角英数だけだったため、勝手に「文字数=バイト数」と思い込んでいました。
>※第2引数は文字数ではなくバイト数です
上記の思い込みもあって未確認でした…。
今回、対象カラムに格納する最大桁数が「3264文字」なのですが、substr的な使い方と混同して、「GetChunk(0, 3263)」と書いておりました。
これを「1文字=2バイト」と換算して、以下のようにする事で問題なく文字列を取得できるようになりました。
>GetChunk(0, 6528)
ご丁寧に、ご指摘・ご教示頂きまして大変助かりました…。
本当にありがとうございました!
リンク先もとても勉強になりました。
今後も参考にさせて頂きたいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
vbsでのwebフォームへの入力制限?
-
Vba Array関数について教えてく...
-
【マクロ】並び替えの範囲が、...
-
Vba セルの4辺について罫線が有...
-
Excel VBA 選択範囲の罫線色の...
-
【マクロ】シートの変数へ入れ...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
【マクロ】開いているブックの...
-
エクセルのマクロについて教え...
-
エクセルの改行について
-
vb.net(vs2022)のtextboxのデザ...
-
エクセルのVBAコードと数式につ...
-
算術演算子「¥」の意味について
-
Excelのマクロについて教えてく...
-
質問58753 このコードでうまく...
-
VBAの「To」という語句について
-
VBAでFOR NEXT分を Application...
-
エクエルのVBAコードについて教...
-
VBAでセルの書式を変えずに文字...
-
【マクロ】変数を使った、文字...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UTF-8で5~6バイトになる文字コ...
-
10Mバイトて文字数に すると何...
-
COBOLのCOMP形式について
-
char str[256]の256の意味は?
-
バイト列とバイナリ列の違いが...
-
エクセルシート名の制限を変更...
-
ピクセル,dpiから容量(バイト...
-
ビットスワップとバイトスワッ...
-
テキストBOXの入力制限について
-
C++ Builderで文字列をバイトに...
-
機種依存文字をチェックしたい。
-
「1TB」のHDDに日本語は何字入...
-
SQLで1バイト、2バイト混在...
-
全角半角を調べるライブラリ関...
-
VB6とSQL Serverの桁の扱い方に...
-
VBAでShift-JISのURLエンコード
-
jis x 0208 について
-
この関数はどのプログラミング...
-
COBOL PICTUREで X,S,Vの意味
-
半角、全角の判別方法
おすすめ情報