Node.js
Node.js met Oracle
Zoeken…
Maak verbinding met Oracle DB
Een zeer eenvoudige manier om verbinding te maken met een ORACLE-database is met behulp van de oracledb
module. Deze module zorgt voor de verbinding tussen uw Node.js-app en Oracle-server. U kunt het installeren zoals elke andere module:
npm install oracledb
Nu moet u een ORACLE-verbinding maken, die u later kunt opvragen.
const oracledb = require('oracledb');
oracledb.getConnection(
{
user : "oli",
password : "password",
connectString : "ORACLE_DEV_DB_TNS_NAME"
},
connExecute
);
De connectString "ORACLE_DEV_DB_TNA_NAME" kan in een tnsnames.org-bestand in dezelfde map staan of waar uw Oracle Instant-client is geïnstalleerd.
Als er geen Oracle Instant Client op uw ontwikkelmachine is geïnstalleerd, kunt u de instant client installation guide
de instant client installation guide
voor uw besturingssysteem volgen.
Een verbindingsobject zonder parameters opvragen
Gebruik kan nu de connExecute-functie gebruiken voor het uitvoeren van een query. U hebt de optie om het queryresultaat als een object of array te krijgen. Het resultaat wordt afgedrukt op 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);
});
}
Omdat we een niet-pooling-verbinding hebben gebruikt, moeten we onze verbinding opnieuw vrijgeven.
function connRelease(connection)
{
connection.close(
function(err) {
if (err) {
console.error(err.message);
}
});
}
De uitvoer voor een object zal zijn
[ { name: 'C1' }, { name: 'C2' } ]
[ { C1: 'test', C2: 'oracle' } ]
en de uitvoer voor een array zal zijn
[ { name: 'C1' }, { name: 'C2' } ]
[ [ 'test', 'oracle' ] ]
Een lokale module gebruiken voor eenvoudiger zoeken
Om uw zoekopdracht vanuit ORACLE-DB te vereenvoudigen, kunt u uw zoekopdracht als volgt aanroepen:
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);
});
Het opbouwen van de verbinding en het uitvoeren is als volgt opgenomen in dit oracle.js-bestand met inhoud:
'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;
Merk op dat u beide methoden queryArray en queryObject hebt om uw oracle-object aan te roepen.