0

db テーブルに、タイプとサイズが VARCHAR2<50> の列があります。CPP コードで getBlob() メソッドを使用して値を取得しています。次のように例外に直面しています。

例外:

ORA-01460: 実装されていない、または不当な変換が要求されました

@ line Blob blob = rset->getBlob(1);

コード:

    if(rset->next())
            {
                Blob blob = rset->getBlob(1);
                if(blob.isNull())
                    cout << "Null Blob" << endl;
                else
                {
                    blob.open (OCCI_LOB_READONLY);
                    int blobLength=blob.length();
                    Stream *instream = blob.getStream (1,0);
                    char *buffer = new char[blobLength];
                    memset (buffer, NULL, blobLength);
                    instream->readBuffer (buffer, blobLength);
                    for (int i = 0; i < size; ++i)
                    cout << (int) buffer[i];
                    cout << endl;
                    delete (buffer);
                    blob.closeStream (instream);
                }
                blob.close ();      
    }

あなたのコメントを教えてください。ありがとう。

PS: フォーラムをチェックしたところ、同じ例外の投稿がありましたが、私が直面しているものに関連するものは見つかりませんでした。

4

1 に答える 1

0

utl_raw.cast_to_raw(col1)単に列を返すのではなく、使用するクエリを変更します。

BLOB のように処理しようとするのではなく、プレーンな古い VARCHAR2 を使用するほうがよいのではないかと思いますが。

于 2014-10-20T18:37:53.623 に答える