Node.js
Node.js con Oracle
Ricerca…
Connetti a Oracle DB
Un modo molto semplice per connettersi a un database ORACLE è utilizzando il modulo oracledb
. Questo modulo gestisce la connessione tra l'app Node.js e il server Oracle. Puoi installarlo come qualsiasi altro modulo:
npm install oracledb
Ora devi creare una connessione ORACLE, che puoi in seguito interrogare.
const oracledb = require('oracledb');
oracledb.getConnection(
{
user : "oli",
password : "password",
connectString : "ORACLE_DEV_DB_TNS_NAME"
},
connExecute
);
Il connectString "ORACLE_DEV_DB_TNA_NAME" può vivere in un file tnsnames.org nella stessa directory o in cui è installato il tuo client istantaneo Oracle.
Se non si dispone di alcun client istantaneo Oracle installato sul proprio computer di sviluppo, è possibile seguire la instant client installation guide
per il proprio sistema operativo.
Interrogare un oggetto di connessione senza parametri
Utilizzare ora può utilizzare la funzione connExecute per l'esecuzione di una query. Hai la possibilità di ottenere il risultato della query come oggetto o array. Il risultato è stampato su 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);
});
}
Poiché abbiamo utilizzato una connessione non di pooling, dobbiamo rilasciare nuovamente la nostra connessione.
function connRelease(connection)
{
connection.close(
function(err) {
if (err) {
console.error(err.message);
}
});
}
L'output per un oggetto sarà
[ { name: 'C1' }, { name: 'C2' } ]
[ { C1: 'test', C2: 'oracle' } ]
e l'output per un array sarà
[ { name: 'C1' }, { name: 'C2' } ]
[ [ 'test', 'oracle' ] ]
Utilizzo di un modulo locale per interrogazioni più semplici
Per semplificare le tue query da ORACLE-DB, puoi chiamare la tua query in questo modo:
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 creazione della connessione e l'esecuzione sono inclusi in questo file oracle.js con il contenuto come segue:
'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;
Nota che hai entrambi i metodi queryArray e queryObject per chiamare sul tuo oggetto oracle.