Sök…


Anslut till Oracle DB

Ett mycket enkelt sätt att ansluta till en ORACLE-databas är med hjälp av oracledb modulen. Den här modulen hanterar anslutningen mellan din Node.js-app och Oracle-servern. Du kan installera den som alla andra moduler:

npm install oracledb

Nu måste du skapa en ORACLE-anslutning, som du senare kan fråga.

const oracledb = require('oracledb');

oracledb.getConnection(
  {
    user          : "oli",
    password      : "password",
    connectString : "ORACLE_DEV_DB_TNS_NAME"
  },
  connExecute
);

ConnectString "ORACLE_DEV_DB_TNA_NAME" kan leva i en tnsnames.org-fil i samma katalog eller där din oracle instant client är installerad.

Om du inte har någon Oracle-omedelbar klient installerad på din utvecklingsmaskin kan du följa instant client installation guide för instant client installation guide för ditt operativsystem.

Fråga ett anslutningsobjekt utan parametrar

Användning kan nu använda connExecute-funktionen för att utföra en fråga. Du har möjlighet att få frågeställningen som ett objekt eller array. Resultatet skrivs ut på 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);
        });
}

Eftersom vi använde en anslutning utan pooler, måste vi släppa vår anslutning igen.

function connRelease(connection)
{
  connection.close(
    function(err) {
      if (err) {
        console.error(err.message);
      }
    });
}

Utgången för ett objekt kommer att vara

[ { name: 'C1' }, { name: 'C2' } ]
[ { C1: 'test', C2: 'oracle' } ]

och utgången för en matris kommer att vara

[ { name: 'C1' }, { name: 'C2' } ]
[ [ 'test', 'oracle' ] ]

Använda en lokal modul för enklare frågeställningar

För att förenkla din fråga från ORACLE-DB kanske du vill ringa din fråga så här:

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);
    });

Uppbyggnaden av anslutningen och exekveringen ingår i denna oracle.js-fil med innehåll på följande sätt:

'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;

Observera att du har båda metoderna queryArray och queryObject för att ringa på ditt orakelobjekt.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow