Node-oracledb 4.0 发布,添加 Oracle 高级队列 API

栏目: 软件资讯 · 发布时间: 6年前

内容简介:node-oracledb 4.0 已经发布,node-oracledb 是甲骨文公司官方发布的 Oracle 的 Node.js 驱动。此版本的新特性主要是包括查询和绑定命名的Oracle类型、Oracle 高级队列 API。具体更新内容如下: 实现重构 虽然模块...

Node-oracledb 4.0 发布,添加 Oracle 高级队列 API

node-oracledb 4.0 已经发布,node-oracledb 是甲骨文公司官方发布的 Oracle 的 Node.js 驱动。此版本的新特性主要是包括查询和绑定命名的Oracle类型、Oracle 高级队列 API。具体更新内容如下:

实现重构

虽然模块仍然是调用 Oracle 客户端库的二进制层的 JavaScript 包装器,但是二进制层现在使用 Node.js 的 N-API 接口而不是 NAN。NAN 是起始的Node.js C++ 包装器,用于在更新 V8 引擎时为模块提供可移植性。使用更新的 N-API 接口带来了许多好处:

  • N-API 有自己的 API 版本化方法,允许构建一个 node-oracledb 二进制文件(每个操作系统体系结构),可以使用当前和更高的 Node.js 版本
  • npm 下载包的大小是 node-oracledb 3.1 包的四分之一,因为该包不需要包含每个 Node.js 版本的二进制文件
  • node-oracledb 代码现在是纯 C,而不是 C++,所以 C 编译器需要构建的模块不再需要 C++ 11 的支持,这在一些较旧的环境中构建更容易

支持查询和绑定命名的 Oracle 类型

这使得 Node.js 成为一个很好的使用 SQL 或 PL/SQL 用户定义类型的环境,或者是在处理诸如 Oracle 的空间特性所使用的预先创建的类型时使用的一个很好的环境。

例如,创建一些类型和一个表:

CREATE TYPE dbharvesttype AS VARRAY(10) OF VARCHAR2(20)
/

CREATE TYPE dbfarmtype AS OBJECT (
   farmername     VARCHAR2(20),
   harvest        dbharvesttype)
/

CREATE TABLE farmtab (id NUMBER, farm dbfarmtype);

Node-oracledb 4.0 发布,添加 Oracle 高级队列 APINode-oracledb 4.0 发布,添加 Oracle 高级队列 API

在 node-oracledb 4.0 中,可以映射 JavaScript 对象以插入列 farm:

// A JavaScript object automatically mapped to the DBFARMTYPE object.
// The case of the properties matters.
const newFarm = {
  FARMERNAME: 'McDonald',
  HARVEST: [ 'corn', 'wheat', 'barley' ]
};
 
await connection.execute(
  `INSERT INTO farmtab (id, farm) VALUES (:id, :f)`,
  { id: 1,
    f: {
      type: 'DBFARMTYPE', // name of the top level DB type, case sensitive
      val: newFarm
    }
  }
);

Node-oracledb 4.0 发布,添加 Oracle 高级队列 APINode-oracledb 4.0 发布,添加 Oracle 高级队列 API

查询 FARMTAB 返回一个 DbObject,它在 node-oracledb 4.0 中是新的:

const result = await connection.execute(`SELECT farm FROM farmtab WHERE id = 1 `);
 
// a DbObject for the named Oracle type:
const farm = result.rows[0][0];
 
// The whole object:
// [MYUSER.DBFARMTYPE] { FARMERNAME: 'MacDonald', HARVEST: [ 'corn', 'wheat', 'barley' ] }
console.log(farm);
 
// Objects can be stringified:
// {"FARMERNAME":"MacDonald","HARVEST":["corn","wheat","barley"]}
console.log(JSON.stringify(farm));
 
// Iterate over the collection:
console.log(farm.FARMERNAME);        // "MacDonald"
for (const crop of farm.HARVEST) {
  console.log(crop);                 // "corn", "wheat", "barley"
}

Node-oracledb 4.0 发布,添加 Oracle 高级队列 APINode-oracledb 4.0 发布,添加 Oracle 高级队列 API

Oracle 高级队列(AQ)

Oracle 高级队列是 Oracle 数据库的一个高度可配置和可伸缩的消息传递功能。它具有各种语言的接口,可以在体系结构中集成多个 工具 来发送和接收消息。node-oracledb 4.0 有一个高级队列 API 支持 RAW 和对象队列,可以发送和接收字符串、缓冲区或对象消息。

例如,如果 RAW 队列在数据库中被配置,则可以发送一个简单的字符串:

const queue = await connection.getQueue('MYQUEUE');
const messageString = 'This is my message';
await queue.enqOne(messageString);
await connection.commit();

Node-oracledb 4.0 发布,添加 Oracle 高级队列 APINode-oracledb 4.0 发布,添加 Oracle 高级队列 API

如果接收它,另一个应用程序可以执行:

const queue = await connection.getQueue('MYQUEUE');
const msg = await queue.deqOne();
await connection.commit();
console.log(msg.payload.toString());

Node-oracledb 4.0 发布,添加 Oracle 高级队列 APINode-oracledb 4.0 发布,添加 Oracle 高级队列 API

隐式结果

这使得将查询结果集从 PL/SQL 返回到 node-oracledb 更加容易。对于隐式结果,不需要绑定变量。DBMS_SQL.RETURN_SUPER 结果接口允许通过 node-oracledb 的新结果返回游标。

result = await connection.execute(
  `DECLARE
    c1 SYS_REFCURSOR;
    c2 SYS_REFCURSOR;
  BEGIN
 
    OPEN c1 FOR SELECT city, postal_code FROM locations;
    DBMS_SQL.RETURN_RESULT(c1);
 
    OPEN C2 FOR SELECT employee_id, last_name FROM employees;
    DBMS_SQL.RETURN_RESULT(c2);
 
  END;`,
 
  [],   // no binds needed
 
  { resultSet: true }
);
 
// Iterate over all the ResultSets
for (const rs of result.implicitResults) {
  while ((row = await rs.getRow()))
    console.log(row);
  await rs.close();
}

Node-oracledb 4.0 发布,添加 Oracle 高级队列 APINode-oracledb 4.0 发布,添加 Oracle 高级队列 API

其他更改

  • 重新编号了 Type 常量和 Oracle 数据库类型常量,以便将来进行绑定增强。确保在应用程序中使用常量名称,而不是它们的值
  • 新的 connection.currentSchema 属性,用于设置 SQL 语句中省略限定符时使用的架构限定符。这是更改会话集 Current_SCHEMA 的一种有效的替代方法
  • 通过 outFormat 设置将查询行输出提取为 JavaScript 对象
  • 引入了新的常量 oracledb.OUT_Format_Array 和 oracledb.OUT_Format_Object,以替换名为 oracledb.ARRAY 和 oracledb.OBJECT 的略带歧义的 oracledb.OBJECT

安装:可以从 npm 安装 node-oracledb 4.0。4.0 版需要 Node.js 8 或更高版本,对于 Node.js 8,最小补丁级别为 8.16,对于 Node.js 10,最小补丁级别为 10.16。

详细内容见发布说明


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Building Social Web Applications

Building Social Web Applications

Gavin Bell / O'Reilly Media / 2009-10-1 / USD 34.99

Building a social web application that attracts and retains regular visitors, and gets them to interact, isn't easy to do. This book walks you through the tough questions you'll face if you're to crea......一起来看看 《Building Social Web Applications》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码