如何在 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 列?的主要内容,如果未能解决你的问题,请参考以下文章
XmlReader - 如何在没有 System.OutOfMemoryException 的情况下读取元素中很长的字符串