Utworzono procedurę składowania w MySQL, która oczekuje pewnych danych wejściowych i zwraca niektóre dane wyjściowe. Aby wywołać procedurę Przechowywać w MySQL używamWywołanie typu wejścia/wyjścia Procedura zapisu w Sequelize
CALL createCoupon(1236,321, @message);
SELECT @message AS message
i coraz wyjście w wiadomości obiektu.
teraz przychodzi sytuacja, w której muszę wywołać to SP w sequelu. Pracuję nad projektem sailsjs i korzystam z modułu sequelize do queerowania.
Utworzyłem połączenie z bazą danych w config/db_config, mój ciąg połączenia jest:
var sequelize = new Sequelize(db.name, db.user, db.pass, {
host: db.host,
dialect: "mysql", // or 'sqlite', 'postgres', 'mariadb'
port: 3306, // or 5432 (for postgres)
maxConcurrentQueries: 100,
pool: {
maxConnections: 50,
maxIdleTime: 2000
},
queue: true
})
i jestem nazywając ją w sterowniku jak:
var Sequelize = require('sequelize');
var sequelize = require('../../config/db_config').dbase;
function setCoupon(couponCode, userId, setCouponResponse) {
var createCouponSQL = "some raw query";
sequelize.query(createCouponSQL, null, {
raw: true
}).success(function(createCoupon) {
sails.log.info(createCoupon);
setCouponResponse(null, createCoupon);
}).error(function(err) {
sails.log.error(err);
setCouponResponse(err, null);
});
}
module.exports = {
'createCoupon': function(req, callback) {
setCoupon(req.param('coupon_code'), req.session.userSession, function(err, setCouponResponse){
})
}
}
teraz muszę zadzwonić SP w sequelize więc ja po prostu spróbuj:
var createCouponSQL = "CALL createCoupon(1236,321, @message);";
createCouponSQL += "SELECT @message AS message";
sequelize.query(createCouponSQL, null, {
raw: true
}).success(function(createCoupon) {
sails.log.info(createCoupon);
setCouponResponse(null, createCoupon);
}).error(function(err) {
sails.log.error(err);
setCouponResponse(err, null);
});
ale sequlize wywołać błąd:
Executing (default): CALL createCoupon(1236,321, @message);SELECT @message AS m
essage
error: Error: ER_PARSE_ERROR: You have an error in your SQL syntax; check the m
anual that corresponds to your MySQL server version for the right syntax to use
near 'SELECT @message AS message' at line 1
at Query.Sequence._packetToError (C:\Users\asd\Desktop\CardCash P2\Website\
node_modules\mysql\lib\protocol\sequences\Sequence.js:30:14)
Zrobiłem trochę R & D ale nie mógł znaleźć niczego odpowiedniego do wywołania procedury sklep który wysyła mi odpowiedź w @message i muszę wykonać inną SELECT, aby uzyskać wynik .
Proszę wskazać mi, w jaki sposób mogę zrobić to poprawnie, używając sposobu, w jaki połączyłem bazę danych.
Dzięki.
myślę, że można wywołać osobno dwa nieprzetworzone zapytania, które pokażą poprawny wynik, ale nie jest to właściwy sposób. –