Node.js
Node.js con Oracle
Buscar..
Conectarse a Oracle DB
Una forma muy fácil de conectarse a una base de datos ORACLE es mediante el uso del módulo oracledb
. Este módulo maneja la conexión entre su aplicación Node.js y el servidor Oracle. Puedes instalarlo como cualquier otro módulo:
npm install oracledb
Ahora tienes que crear una conexión ORACLE, que puedes consultar más tarde.
const oracledb = require('oracledb');
oracledb.getConnection(
{
user : "oli",
password : "password",
connectString : "ORACLE_DEV_DB_TNS_NAME"
},
connExecute
);
El connectString "ORACLE_DEV_DB_TNA_NAME" puede residir en un archivo tnsnames.org en el mismo directorio o donde está instalado su cliente instantáneo de Oracle.
Si no tiene ningún cliente instantáneo de Oracle instalado en su máquina de desarrollo, puede seguir la instant client installation guide
para su sistema operativo.
Consultar un objeto de conexión sin parámetros
El uso ahora puede usar la función connExecute para ejecutar una consulta. Tiene la opción de obtener el resultado de la consulta como un objeto o matriz. El resultado está impreso en 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);
});
}
Dado que usamos una conexión no agrupada, tenemos que liberar nuestra conexión nuevamente.
function connRelease(connection)
{
connection.close(
function(err) {
if (err) {
console.error(err.message);
}
});
}
La salida para un objeto será
[ { name: 'C1' }, { name: 'C2' } ]
[ { C1: 'test', C2: 'oracle' } ]
y la salida para una matriz será
[ { name: 'C1' }, { name: 'C2' } ]
[ [ 'test', 'oracle' ] ]
Usando un módulo local para facilitar la consulta
Para simplificar su consulta desde ORACLE-DB, puede llamar a su consulta de la siguiente manera:
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 creación y conexión de la conexión se incluye en este archivo oracle.js con el siguiente contenido:
'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;
Tenga en cuenta que tiene ambos métodos queryArray y queryObject para llamar a su objeto oracle.