我正在尝试使用 mybatis 从 Oracle 数据库中检索 BLOB 列的内容。有一个表 'Demo' 包含一个 BLOB 类型的列 'binfile'。我想选择 BLOB 列并将其显示为字节数组/原始二进制数据。我正在使用 Oracle 瘦 JDBC 驱动程序。
mybatis mapper 中的查询是这样的:
<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>
我显然收到一个错误,说原始变量说“PL/SQL:数字或值错误:原始变量长度太长”,因为图像远远超过 100 kB,因为 SQL 中的 VARCHAR2 变量只能支持 2000 个字节。
有针对这个的解决方法吗?
我想编写一个存储过程,逐块读取 BLOB 列并将输出写入文件。但是该文件将保存在数据库服务器上,我无法检索它。