【问题标题】:NPM Oracle: Inserting BLOBsNPM Oracle:插入 BLOB
【发布时间】: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 以下。

标签: javascript node.js oracle node-oracledb


【解决方案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 语句,您不会在末尾提供分号。只需将其删除并重试。
猜你喜欢
  • 2016-02-08
  • 2015-09-12
  • 2013-05-03
  • 2018-11-13
  • 2014-11-26
  • 1970-01-01
  • 2020-12-26
  • 2016-11-13
  • 1970-01-01
相关资源
最近更新 更多