Node.js
Node.js avec Oracle
Recherche…
Se connecter à Oracle DB
Un moyen très simple de se connecter à une base de données ORACLE consiste à utiliser le module oracledb
. Ce module gère la connexion entre votre application Node.js et le serveur Oracle. Vous pouvez l'installer comme n'importe quel autre module:
npm install oracledb
Vous devez maintenant créer une connexion ORACLE, que vous pouvez interroger ultérieurement.
const oracledb = require('oracledb');
oracledb.getConnection(
{
user : "oli",
password : "password",
connectString : "ORACLE_DEV_DB_TNS_NAME"
},
connExecute
);
ConnectString "ORACLE_DEV_DB_TNA_NAME" peut vivre dans un fichier tnsnames.org situé dans le même répertoire ou sur lequel votre client instantané Oracle est installé.
Si vous ne disposez d'aucun client instantané Oracle sur votre ordinateur de développement, vous pouvez suivre le instant client installation guide
à votre système d'exploitation.
Interroger un objet de connexion sans paramètres
Utiliser peut maintenant utiliser la fonction connExecute pour exécuter une requête. Vous avez la possibilité d'obtenir le résultat de la requête en tant qu'objet ou tableau. Le résultat est imprimé sur 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);
});
}
Comme nous avons utilisé une connexion sans pool, nous devons relancer notre connexion.
function connRelease(connection)
{
connection.close(
function(err) {
if (err) {
console.error(err.message);
}
});
}
La sortie pour un objet sera
[ { name: 'C1' }, { name: 'C2' } ]
[ { C1: 'test', C2: 'oracle' } ]
et la sortie pour un tableau sera
[ { name: 'C1' }, { name: 'C2' } ]
[ [ 'test', 'oracle' ] ]
Utiliser un module local pour faciliter les requêtes
Pour simplifier votre requête à partir d'ORACLE-DB, vous pouvez appeler votre requête comme ceci:
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);
});
La construction de la connexion et son exécution sont incluses dans ce fichier oracle.js avec le contenu suivant:
'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;
Notez que vous disposez des deux méthodes queryArray et queryObject pour appeler votre objet oracle.