我正在使用MySQL
和strongloop
,我有一个存储过程来交换数据
swap_XYZ('<old_abc>', '<new_new>')
我无法在文档中找到任何调用存储过程的示例。如何调用此存储过程?提前致谢。
答案 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.MySQL
和app.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