2016-01-14 22 views
5

मेरे पास एक सम्मिलित ट्रिगर है। जो संग्रहीत प्रक्रिया को कॉल करता है। जब मैं सीधी क्वेरी चलाता हूं तो यह अच्छी तरह से काम करता है। लेकिन जब मैं नोड जेएस ऐप के माध्यम से डेटा डालता हूं। यह मुख्य तालिका में डेटा भी सम्मिलित नहीं करता है। ट्रिगर और संग्रहीत प्रक्रिया में कोई त्रुटि नहीं है क्योंकि यह तालिका के लिए सीधे सम्मिलित क्वेरी के साथ काम करता है।डालने के बाद ट्रिगर काम नहीं करता है जब नोड जेएस ऐप से होता है

dbObject.create(data, function(err, response){ 
     if (err) { 
      //console.log("err", err); 
      res.status(500).jsonp(response) 
     } 
     console.log("response", response); 
     dbObject.find({SnsId: SnsId}, '*' , {}, 0, 0, {}, function(err, resp){ 
      if (err) { 
       //console.log("err", err); 
       res.status(500).jsonp(err) 
      } 
      console.log("response", resp); 
      res.jsonp(resp); 
     }); 
    }); 

ट्रिगर कोड -

DELIMITER $$ 
CREATE TRIGGER `copytoSensorMapTrigger` AFTER INSERT ON test4.`SENSORS` 
FOR EACH ROW 
BEGIN 
    CALL copyToSensorMap(NEW.`SnsId`,NEW.`SnsState`); 
END; 

संग्रहित प्रक्रिया कोड -

DELIMITER $$ 
CREATE PROCEDURE copyToSensorMap(IN snsid bigint(20),IN sns_state varchar(128)) 
    BEGIN 
    DECLARE color varchar(128); 
    INSERT INTO test3.`SENSOR_MAP` (`SENSOR_ID`, `SENSOR_NAME`, `USER_ID`, `HOST_ID`, `SENSOR_STATE`) 
    SELECT `SnsId`, 
    `SnsName`,`SnsOwner`,`HostId`,`SnsState` 
     FROM test4.`SENSORS` 
     where test4.`SENSORS`.`SnsId`=snsid; 
    IF (sns_state ='Unassigned') THEN 
     set color = 'Grey'; 
    ELSEIF (sns_state ='Running') THEN 
    set color = 'Green'; 
    END IF; 
    update test3.`SENSOR_MAP` 
     set test3.`SENSOR_MAP`.`SENSOR_COLOR` = color 
     where test3.`SENSOR_MAP`.`SENSOR_ID` = snsid; 
UPDATE test3.`SENSOR_MAP` 
    INNER JOIN test4.`HOSTS` 
    ON (test3.`SENSOR_MAP`.`HOST_ID` = test4.`HOSTS`.id) 
    SET 
    test3.`SENSOR_MAP`.HOST_NAME = test4.HOSTS.Name, 
    test3.`SENSOR_MAP`.LATITUDE = test4.HOSTS.GpsLatitude, 
    test3.`SENSOR_MAP`.LONGITUDE = test4.HOSTS.GpsLongitude; 
UPDATE test3.`SENSOR_MAP` 
    INNER JOIN test4.`users` ON (test3.`SENSOR_MAP`.`USER_ID` = test4.`users`.id) 
    SET 
    test3.`SENSOR_MAP`.USER_NAME = test4.users.user; 
UPDATE test3.`SENSOR_MAP` c 
    INNER JOIN 
    (
     select a.`SnsId`,b.id,b.ServiceName,b.ServiceType 
      from test4.sensors as a 
      join test4.SESSIONS as b on a.SessionId =b.id 
      where a.`SnsId` =snsid 
      group by `SnsId` 
    ) d ON c.SENSOR_ID = d.`SnsId` 
    SET c.SESSION_NAME = d.ServiceName, 
     c.SESSION_TYPE = d.ServiceType; 
END $$ 

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

समस्या हल हो गई है। यह माइस्क्ल में सभी कैप्स में एक टेबल नाम था और मैंने लोअरकेस में लिखा था। टेबल्स नाम "उपयोगकर्ता" और "सेंसर" थे। अब यह हल हो गया है।

+0

ज्यादा नहीं है कि कोड के उस टुकड़े से अनुमान लगाया जा सकता है, एक [mcve] (http://stackoverflow.com/help/mcve) पोस्ट करने के लिए प्रयास करें। – cviejo

+1

जब आप 'dbObject.create (...) 'को कॉल करते समय उपयोग की जाने वाली वास्तविक SQL क्वेरी को लॉगिंग करने का प्रयास कर सकते हैं और यह देखने के लिए कि आप कोई विसंगति – mzulch

+0

" है, तो यह मुख्य तालिका में डेटा भी सम्मिलित नहीं करता है "- इसका मतलब है कि समस्या आपके node.js डेटाबेस सम्मिलन में है। आपके द्वारा साझा किए गए कोड स्निपेट के साथ समस्या की पहचान करना संभव नहीं है। कृपया निर्दिष्ट करें कि आप किस डीबी का उपयोग कर रहे हैं और इसके अनुरूप अधिक कोड स्निपेट निर्दिष्ट करें। – Damodaran

उत्तर

1

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

इस कोड का उपयोग का प्रयास करें:

dbObject.create(data, function(err, response){ 
    if (err) { 
     //console.log("err", err); 
     return res.status(500).jsonp(response) 
    } 
    console.log("response", response); 
    dbObject.find({SnsId: SnsId}, '*' , {}, 0, 0, {}, function(err, resp){ 
     if (err) { 
      //console.log("err", err); 
      return res.status(500).jsonp(err) 
     } 
     console.log("response", resp); 
     res.jsonp(resp); 
    }); 
}); 
+0

उम्म, वह सचमुच सटीक कोड है जिसका वह उपयोग कर रहा है। – miken32

+0

@ miken32 उम्म, उन्होंने पोस्ट किए जाने के बाद रिटर्न स्टेटमेंट जोड़ने के लिए अपना मूल प्रश्न संपादित किया। – Chev

+0

हाहा, इसके बारे में खेद है। अभी भी सवाल का जवाब नहीं है। – miken32

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