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 数据
使用 Java 为 DB2 和 Oracle 插入 BLOB