NPM Oracle:插入 BLOB

Posted

技术标签:

【中文标题】NPM Oracle:插入 BLOB【英文标题】:NPM Oracle: Inserting BLOBs 【发布时间】:2019-11-06 12:20:30 【问题描述】:

我正在尝试使用 NPM oracle 库并使用从我的计算机上的文件创建的 BLOB 值更新一些表。 Oracle 文档说要使用如下的 createLob() 函数来获取数据库将接受的值:

conn.createLob(oracledb.BLOB, function(err, templob) 
if (err)  . . . 
// ... else use templob
);

但我不知道“使用 templob”意味着什么......

如何将我的数据放入这些 oracledb.BLOB 对象中?

编辑:我正在尝试的更新示例:

const queryString = `UPDATE TABLENAME SET BLOB = :blob WHERE ID = 1234;`;
                this.oracleConnection.execute(queryString, 
                    blob: await fs.readFileSync('/path/to/image.jpg')
                )

【问题讨论】:

你能提供更多关于你在做什么的细节吗? BLOB 来自哪里(服务器、Web 服务器等上的文件)? BLOB 有多大? 文件来自我的电脑,如上所述。文件大小可变,但现在应该都在 1mb 以下。 【参考方案1】:

根据您的用例(小文件和有限的并发性),我认为缓冲区 API 将是最好的选择,因为它们非常简单。来自the doc:

给定表格:

CREATE TABLE mylobs (id NUMBER, c CLOB, b BLOB);

一个 INSERT 示例是:

var fs = require('fs');
var str = fs.readFileSync('example.txt', 'utf8');
. . .

conn.execute(
  `INSERT INTO mylobs (id, myclobcol) VALUES (:idbv, :cbv)`,
   idbv: 1,
    cbv: str ,  // type and direction are optional for IN binds
  function(err, result) 
    if (err)
      console.error(err.message);
    else
      console.log('CLOB inserted from example.txt');
. . .

另外,如果你需要它,我将结束一个关于这个主题的迷你系列,但它更多地围绕网络服务器上传:https://jsao.io/2019/06/uploading-and-downloading-files-with-node-js-and-oracle-database/

【讨论】:

这仍然给我在缓冲区内的偏移量上的无效字符错误。我要更新的列是 BLOB,而不是 CLOB,这有关系吗? 用示例更新帖子 不管是CLOB还是BLOB,驱动都支持。你能提供你得到的确切错误吗?通常,使用可重现的测试用例总是更容易解决这些问题。此外,您无需等待对 readFileSync 的调用,因为它是一种同步方法。 [错误:ORA-00911:无效字符] errorNum:911,偏移量:64 啊,对于 SQL 语句,您不会在末尾提供分号。只需将其删除并重试。

以上是关于NPM Oracle:插入 BLOB的主要内容,如果未能解决你的问题,请参考以下文章

SQLAlchemy 在 Oracle DB 中批量插入 blob 数据

oracle sql错误:插入blob格式的图片

使用 Java 为 DB2 和 Oracle 插入 BLOB

如何获取 blob 类型的数据以在 oracle 中插入?

MyBatis 批量插入包含 BLOB 类型的数据到 Oracle 异常问题分析

MyBatis 批量插入包含 BLOB 类型的数据到 Oracle 异常问题分析