Express (Node) 与 Oracle DB 做接口—简

2018-06-22  本文已影响0人  环零弦

背景

很久之前已经做好了 NodeMySQL 之间的接口,后来又优化重写了一遍,应该没有什么问题了。现在需要另外与 Oracle DB 做接口。

具体需求

因为出于很多因素考虑,数据库只暴露存储过程调用的接口,所以只需要在 Node 中做调用存储过程的接口即可。

步骤:

  1. 之前就调研好在 Node 中连 Oracle DB(以下称 Oracle) 的包选用 oracledbnpm install oracledb
  2. 如果此刻运行会报错,提示需要在本地有 Oracle 的一些驱动等,去到 Oracle 官网根据自己特定的平台下载所谓 Instant Clients。这一步可能需要用户登录才能下载,不然下载不成功。下载成功后将目录路径放在系统的环境变量中,重新开一个 Shell 运行即可。此刻应该就可以运行成功了。
  3. 关于形参,可以使用变量名或者索引对应的方法。出于封装与向前兼容的考虑,使用索引的方法,当然后面的具体参数输入就需要传一个对应数组进来。
  4. 关于输出变量的注册与结果集的获取。
    • 如果只注册了一个输出变量,那么在回调中使用 result.outBinds 下面的方法就可以取到结果数据。
    • 如果注册了若干个输出变量,那么在回调中的 result.outBinds 就是个数组,需要依次取下面的元素,再使用上述方法取下面的具体数据。
    const plsql = 'BEGIN pkg_medicare_payment.prc_getpersoninfo(:0, :1, :2, :3); END;';
    const bindvars = [
      '李健', '220104197811149217',
      {
        dir: oracledb.BIND_OUT,
        type: oracledb.CURSOR
      },
      {
        dir: oracledb.BIND_OUT,
        type: oracledb.CURSOR
      }
    ];
    connection.execute(
      plsql,
      bindvars,
      function (err, result) {
        if (err) {
          console.log(err);
        }
        result.outBinds[0].getRows(10).then(rows => console.log(rows));
        result.outBinds[1].getRows(10, (err, rows) => console.log(rows));
        // fetchRowsFromRS(connection, result.outBinds.cursor, numRows);
      });
    
  5. 以上代码只关乎上述逻辑,不包含获取连接与释放连接的部分。

参考资料:

上一篇下一篇

猜你喜欢

热点阅读