如何在strongloop中调用存储过程

时间:2016-02-18 06:39:00

标签: javascript angularjs node.js loopbackjs strongloop

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

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

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

4 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

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

https://docs.strongloop.com/display/public/LB/Database+connectors https://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 :(得分:0)

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

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

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

然后确保您的数据库用户帐户具有调用存储过程的特权:

  

授予功能/过程特权:在使用功能和   程序,可以使用Grant语句授予用户能力   在MySQL中执行功能和过程。 授予执行   特权:“执行”特权使您能够执行功能   或程序。

     

语法:

     

GRANT EXECUTE ON [步骤|功能对象对象给用户;

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

答案 3 :(得分:0)

使用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