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

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

内容简介: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。

详细内容见发布说明


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

查看所有标签

猜你喜欢:

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

网站转换率优化之道

网站转换率优化之道

[美] Khalid Saleh、[美] Ayat Shukairy / 顾 毅 / 人民邮电出版社 / 2012-4 / 45.00元

内容简介: 怎样才能将访问者转化为顾客? 本书提供了一些切实可行的建议,比如如何说服访问者作出购买决定,如何避免用户因信息过量或导航繁琐而离开网站等。不论你是在设计或营销大型电子商务网站,还是在管理中小型在线业务,都可以从本书学会怎样使用市场营销原则、设计方法、可用性原则和分析数据来持续提升网站的转换率。 作者帮助过众多公司吸引在线顾客,有着丰富的实战经验,在书中细致讨论了从访问......一起来看看 《网站转换率优化之道》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

在线进制转换器
在线进制转换器

各进制数互转换器

随机密码生成器
随机密码生成器

多种字符组合密码