2015-06-04 12 views
5

में मैंने MySQL में एक स्टोर प्रक्रिया बनाई है जो कुछ इनपुट की अपेक्षा करता है और कुछ आउटपुट देता है। MySQL में दुकान प्रक्रिया कॉल करने के लिए मैंकॉलिंग इनपुट/आउटपुट प्रकार स्टोर प्रक्रिया सीक्वेलिज़

CALL createCoupon(1236,321, @message); 
SELECT @message AS message 

चला रहा हूँ और संदेश वस्तु में उत्पादन हो रही है।

अब यहां ऐसी स्थिति आती है जो मुझे इस एसपी को अनुक्रमित करने के लिए कॉल करने की आवश्यकता है। मैं sailsjs परियोजना पर काम कर रहा हूँ और queering के लिए sequelize मॉड्यूल का उपयोग कर रहा हूँ।

मैं config/db_config में डेटाबेस कनेक्शन बनाने के बाद, मेरे कनेक्शन स्ट्रिंग है:

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

और मैं की तरह नियंत्रक में यह फोन कर रहा हूँ:

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){ 

     }) 

    } 
} 

अब मैं फोन करने की जरूरत है sequelize में सपा तो मैं बस की कोशिश:

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

लेकिन sequlize त्रुटि उत्पन्न:

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) 

मैं कुछ आर & डी किसी भी बात एक दुकान की प्रक्रिया है जिससे मुझे @message में प्रतिक्रिया भेज रहा है वापस बुलाने के लिए उचित ढूँढने में सक्षम किया लेकिन नहीं और मैं परिणाम प्राप्त करने के लिए एक और चयन बयान पर अमल करने की जरूरत है गया है ।

कृपया मुझे मार्गदर्शन करें कि मैं डेटाबेस से कनेक्ट किए गए तरीके से इसका उपयोग कैसे कर सकता हूं।

धन्यवाद।

+0

लगता है मैं आपको लगता है दो कच्चे प्रश्नों को अलग से कॉल कर सकते हैं और यह आपको सही परिणाम दिखाएगा लेकिन यह उचित तरीका नहीं है। –

उत्तर

0

हालांकि बहुत देर हो चुकी है, लेकिन हम एक परियोजना में कुछ ऐसा कर रहे हैं। पूरी यात्रा दिखती है,

हमने सभी एसपी की व्यक्तिगत एसक्यूएल फाइलों में बनाया है और एक तैनाती चरण है, जो सभी एसपी को डेटाबेस में डालता है, जिससे उन्हें उस विशेष स्थान से लाया जाता है।

सभी एसपी मूल रूप से एसपी के अंत में SELECT कथन चलाकर वापस आते हैं। और एसपी के बाहर एक अलग चयन नहीं है।

तो जैसे

DELIMITER $$ 
DROP PROCEDURE IF EXISTS sp_copy_cleansheet; 
$$ 
CREATE PROCEDURE `take_over_the_world` (#Some Input Args) 

BEGIN 
    DECLARE method_to_be_used VARCHAR(1000); 
    # Define how to take over the world, 
    # SET method_to_be_used = "Approach A"; 
    ... 
    ... 
    SELECT method_to_be_used as Result; 
END 

अब हम सपा का उपयोग sequelize कच्चे प्रश्नों फोन एक बुनियादी संरचना,

const query = 'CALL take_over_the_world(:someArg)'; 
return Model.sequelize.query(query, 
{ 
    replacements : { someArg}, 
    type : Model.sequelize.QueryTypes.SELECT 
}) 
.then((response) => { 

//Access response here. Its of the form [{Result: /*How to take over*/}] 
}); 

यह सब पूरी तरह से अब तक काम करने :)

संबंधित मुद्दे