【问题标题】:How to call stored procedure in strongloop如何在strongloop中调用存储过程
【发布时间】:2016-05-30 05:02:27
【问题描述】:

我正在使用MySQLstrongloop,我有一个存储过程来交换数据

swap_XYZ('<old_abc>', '<new_new>')

我无法在文档中找到任何调用存储过程的示例。如何调用这个存储过程?提前致谢。

【问题讨论】:

  • 查看URL,希望对您有所帮助

标签: javascript angularjs node.js loopbackjs strongloop


【解决方案1】:

参考此链接。 dataSource.connector.execute(sql, params, cb);或 dataSource.connector.query(sql, params, cb);

https://docs.strongloop.com/display/public/LB/Database+connectorshttps://docs.strongloop.com/display/public/LB/Executing+native+SQL

 module.exports = function(DemoModel) {
    var server = require('../../server/server');
      var ds = server.dataSources.MySQL;

    DemoModel.list = function(optionalparam, cb) {  


      var sql = 'select * from DemoModel';
      ds.connector.execute(sql, function(err, data)
      {
      if(err) return err;
      console.log(err);
      console.log("data",data);
        cb(null, data);
      });

    }

    DemoModel.remoteMethod(
        'list', 
        {
          accepts: {arg: 'param', type: 'string'},
          returns: {arg: 'result', type: 'object'},
          http: {path: '/list', verb: 'get'}
        }
    );


    };

【讨论】:

  • 我正在尝试这个但得到错误“无法读取未定义的属性'连接器'”
【解决方案2】:
module.exports = function (ABCModel) {
 var ds = app.dataSources.dsMySQL;

  ABCModel.swap = function (old_abc, new_abc, cb) {

    var sql = "CALL `swap_XYZ`('" + old_abc + "','" + new_abc + "');";

    ds.connector.query(sql, function (err, data) {
      if (err) {
        console.log("Error:", err);
      }
      cb(null, data);
      console.log("data:", data);
    });
  }

  ABCModel.remoteMethod(
    'swap',
    {
      accepts: [
        {arg: 'old_abc', type: 'string'},
        {arg: 'new_abc', type: 'string'}
      ],
      returns: {arg: 'result', type: 'object'},
      http: {path: '/swap', verb: 'post'}
    }
  );
};

【讨论】:

    【解决方案3】:

    我终于成功调用了存储过程..

    首先,我们需要定义app like Riaz as kather var app = require('../../server/server');

    但是app.dataSources.MySQLapp.dataSources.dsMySQL 都不适合我。我的环回版本是loopback@3.17.1,对我来说正确的属性名称是app.dataSources.mysql;

    然后确保你的数据库用户账号有调用存储过程的权限:

    授予函数/过程的权限:在使用函数和 程序中,Grant 语句可用于授予用户能力 执行 MySQL 中的函数和过程。 授予执行 特权: 执行特权赋予执行功能的能力 或程序。

    语法:

    在 [ 程序 | 上授予执行FUNCTION ] 对象给用户;

    引用自:https://www.geeksforgeeks.org/mysql-grant-revoke-privileges/

    【讨论】:

      【解决方案4】:

      使用node.js调用PL/SQL存储过程

      假设过程的名称是getCountryName,它有一个输入参数和一个输出参数。

      var executeProcedure = function () {
              var procedureName = "CALL GETCOUNTRYNAME(:inputVal,:outVal)";
              var oracledb = require('oracledb');
              oracledb.maxRows = 1;
              // oracledb.fetchAsString = [oracledb.CLOB];
              oracledb.getConnection(
                  {
                      user: 'user',
                      password: 'password',
                      connectString: "connectString"
                  },
                  function (err, connection) {
                      if (err) {
                          console.error(err);
      
                          return;
                      }
                      connection.execute(
                          procedureName,
                          {
                              outVal: {
                                  type: oracledb.STRING,
                                  dir: oracledb.BIND_OUT
                              },
                              inputVal: {
                                  type: oracledb.STRING,
                                  dir: oracledb.BIND_IN,
                                  val: 'IN'
                              }
                          },
      
                          function (err, result) {
                              if (err) {
                                  console.error(err);
      
                                  return;
                              }
                             console(result)
                          });
                  });
      };
      

      更多详情

      https://github.com/oracle/node-oracledb/blob/master/doc/api.md#queryinglobs https://dzone.com/articles/plsql-record-types-and-the-nodejs-driver

      https://github.com/oracle/node-oracledb/blob/master/examples/example.js

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-02-25
        • 2013-11-23
        • 1970-01-01
        • 2016-01-08
        • 2013-08-14
        • 2011-06-11
        相关资源
        最近更新 更多