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 介面帶來了許多好處:
這使得 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 中,可以映射 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
}
}
);
查詢 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"
}
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();
如果接收它,另一個應用程序可以執行:
const queue = await connection.getQueue('MYQUEUE');
const msg = await queue.deqOne();
await connection.commit();
console.log(msg.payload.toString());
這使得將查詢結果集從 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();
}
安裝:可以從 npm 安裝 node-oracledb 4.0。4.0 版需要 Node.js 8 或更高版本,對於 Node.js 8,最小補丁級別為 8.16,對於 Node.js 10,最小補丁級別為 10.16。
詳細內容見發布說明
[admin
]