Node.js
Node.js с Oracle
Поиск…
Подключение к базе данных Oracle
Очень простой способ подключения к базе данных ORACLE - использовать модуль oracledb
. Этот модуль обрабатывает соединение между вашим приложением Node.js и сервером Oracle. Вы можете установить его, как и любой другой модуль:
npm install oracledb
Теперь вам нужно создать соединение ORACLE, которое вы можете позже запросить.
const oracledb = require('oracledb');
oracledb.getConnection(
{
user : "oli",
password : "password",
connectString : "ORACLE_DEV_DB_TNS_NAME"
},
connExecute
);
ConnectString «ORACLE_DEV_DB_TNA_NAME» может находиться в файле tnsnames.org в том же каталоге или где установлен ваш мгновенный клиент oracle.
Если на вашем компьютере разработки не установлен какой-либо мгновенный клиент oracle, вы можете следовать instant client installation guide
по instant client installation guide
для вашей операционной системы.
Запрос объекта соединения без параметров
Теперь использование функции connExecute-function для выполнения запроса может быть использовано. У вас есть возможность получить результат запроса как объект или массив. Результат напечатан на console.log.
function connExecute(err, connection)
{
if (err) {
console.error(err.message);
return;
}
sql = "select 'test' as c1, 'oracle' as c2 from dual";
connection.execute(sql, {}, { outFormat: oracledb.OBJECT }, // or oracledb.ARRAY
function(err, result)
{
if (err) {
console.error(err.message);
connRelease(connection);
return;
}
console.log(result.metaData);
console.log(result.rows);
connRelease(connection);
});
}
Поскольку мы использовали соединение без объединения, мы должны снова отправить наше соединение.
function connRelease(connection)
{
connection.close(
function(err) {
if (err) {
console.error(err.message);
}
});
}
Выход для объекта будет
[ { name: 'C1' }, { name: 'C2' } ]
[ { C1: 'test', C2: 'oracle' } ]
и выход для массива будет
[ { name: 'C1' }, { name: 'C2' } ]
[ [ 'test', 'oracle' ] ]
Использование локального модуля для упрощения запросов
Чтобы упростить запрос из ORACLE-DB, вы можете вызвать свой запрос следующим образом:
const oracle = require('./oracle.js');
const sql = "select 'test' as c1, 'oracle' as c2 from dual";
oracle.queryObject(sql, {}, {})
.then(function(result) {
console.log(result.rows[0]['C2']);
})
.catch(function(err) {
next(err);
});
Создание соединения и выполнение включено в этот файл oracle.js с содержимым следующим образом:
'use strict';
const oracledb = require('oracledb');
const oracleDbRelease = function(conn) {
conn.release(function (err) {
if (err)
console.log(err.message);
});
};
function queryArray(sql, bindParams, options) {
options.isAutoCommit = false; // we only do SELECTs
return new Promise(function(resolve, reject) {
oracledb.getConnection(
{
user : "oli",
password : "password",
connectString : "ORACLE_DEV_DB_TNA_NAME"
})
.then(function(connection){
//console.log("sql log: " + sql + " params " + bindParams);
connection.execute(sql, bindParams, options)
.then(function(results) {
resolve(results);
process.nextTick(function() {
oracleDbRelease(connection);
});
})
.catch(function(err) {
reject(err);
process.nextTick(function() {
oracleDbRelease(connection);
});
});
})
.catch(function(err) {
reject(err);
});
});
}
function queryObject(sql, bindParams, options) {
options['outFormat'] = oracledb.OBJECT; // default is oracledb.ARRAY
return queryArray(sql, bindParams, options);
}
module.exports = queryArray;
module.exports.queryArray = queryArray;
module.exports.queryObject = queryObject;
Обратите внимание, что у вас есть оба метода queryArray и queryObject для вызова вашего объекта oracle.