サーチ…


Oracle DBに接続する

ORACLEデータベースに接続する簡単な方法は、 oracledbモジュールを使用するoracledbです。このモジュールは、Node.jsアプリケーションとOracleサーバー間の接続を処理します。他のモジュールと同様にインストールできます:

npm install oracledb

これで、ORACLE接続を作成する必要があります。これを後で照会できます。

const oracledb = require('oracledb');

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

connectString "ORACLE_DEV_DB_TNA_NAME"は、oracleインスタント・クライアントがインストールされているディレクトリまたは同じディレクトリのtnsnames.orgファイルに存在します。

開発マシンにインストールされているOracleインスタント・クライアントがない場合は、ご使​​用のオペレーティング・システムのinstant client installation guide従います。

パラメータなしで接続オブジェクトを照会する

useは、クエリを実行するためにconnExecute-Functionを使用するようになりました。クエリ結果をオブジェクトまたは配列として取得するオプションがあります。結果は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);
        });
}

プールしていない接続を使用していたので、接続をもう一度解放する必要があります。

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

オブジェクトの出力は次のようになります。

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

配列の出力は次のようになります。

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

簡単なクエリのためにローカルモジュールを使用する

ORACLE-DBからの問合せを簡略化するために、問合せを次のように呼び出すことができます。

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

このoracle.jsファイルには、次のようなコンテンツが含まれています。

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

oracleオブジェクトで呼び出すqueryArrayメソッドとqueryObjectメソッドの両方があることに注意してください。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow