如何在 Oracle 中读取很长的 BLOB 列?

Posted

技术标签:

【中文标题】如何在 Oracle 中读取很长的 BLOB 列?【英文标题】:How can I read a very long BLOB column in Oracle? 【发布时间】:2020-08-20 02:03:14 【问题描述】:

我想将 Node Express API 与 Oracle 11g 数据库连接起来,该数据库有一个带有 BLOB 列的表。我想使用 SQL 查询来阅读它,但问题是 BLOB 列可以有很长的文本,超过 100k 个字符。我该怎么做?

我尝试使用:select utl_raw.cast_to_varchar2(dbms_lob.substr(COLUMN_NAME)) from TABLE_NAME。 但它返回“原始变量长度太长”。

我可以在一个循环中进行多个查询,然后在必要时加入它们,但我还没有找到如何只提取 blob 的一部分。

【问题讨论】:

Oracle 内置了流式传输操作。 【参考方案1】:

使用node-oracledb module 访问Oracle 数据库(您可能已经这样做了,但不要提及)。

默认情况下,node-oracledb 会将 LOB 作为您可以从中流式传输的 Lob 实例返回。或者,您可以直接以字符串或缓冲区的形式获取数据,这对于“小型”LOB 很有用。对于 100K,我只是将数据作为缓冲区获取,您可以通过设置来做到这一点:

oracledb.fetchAsBuffer = [ oracledb.BLOB ];

查看Working with CLOB, NCLOB and BLOB Data 文档以及blobhttp.js 等示例以及examples directory 中的其他lob*.js 文件。

您可能还想查看显示 Express 和 node-oracledb 的 https://jsao.io/2018/03/creating-a-rest-api-with-node-js-and-oracle-database/。

【讨论】:

以上是关于如何在 Oracle 中读取很长的 BLOB 列?的主要内容,如果未能解决你的问题,请参考以下文章

Oracle中储存很大很长的字符串用啥类型

XmlReader - 如何在没有 System.OutOfMemoryException 的情况下读取元素中很长的字符串

oracle 如何将字段类型varchar 改为blob 更改提示数据类型的变更无效

如何在java中读取oracle blob

如何在oracle中的blob字段下读取jpg格式文件保存

java更新一个很长的字符串到oracle某表clob字段里