美文网首页
Express (Node) 与 Oracle DB 做接口—简

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

作者: 环零弦 | 来源:发表于2018-06-22 09:58 被阅读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. 以上代码只关乎上述逻辑,不包含获取连接与释放连接的部分。

    参考资料:

    相关文章

      网友评论

          本文标题:Express (Node) 与 Oracle DB 做接口—简

          本文链接:https://www.haomeiwen.com/subject/hyghyftx.html