mybatis を使用して Oracle データベースから BLOB 列の内容を取得しようとしています。タイプBLOBの列「binfile」を含むテーブル「Demo」があります。BLOB 列を選択して、バイト配列/生のバイナリ データとして表示したいと考えています。Oracle シン JDBC ドライバーを使用しています。
mybatis マッパーのクエリは次のようになります。
<mapper namespace="Oracle" >
...
<select id="SelectBinary" resultType="hashmap">
SELECT binfile from mpdemo.Demo
</select>
</mapper>
これを行うと、得られる結果は次のようになります。
BINFILE: "oracle.sql.BLOB@5d67eb18"
私がこれを行う場合:
<select id="SelectBinaryDup" resultType="hashmap">
SELECT utl_raw.cast_to_varchar2(dbms_lob.substr(binfile)) from mpdemo.Demo
</select>
SQL の VARCHAR2 変数は 2000 バイトしかサポートできないため、画像が 100 kB をはるかに超えているため、「PL/SQL: 数値または値のエラー: 生の変数の長さが長すぎます」という生の変数というエラーが明らかに表示されます。
これに対する解決策はありますか?
BLOB 列をブロックごとに読み取り、出力をファイルに書き込むストアド プロシージャを作成することを考えました。しかし、そのファイルはデータベース サーバーに保存され、取得できません。