2016-01-14 18 views
5

Mam wyzwalacz po wstawieniu. która wywołuje procedurę przechowywaną. Gdy uruchomię zapytanie bezpośrednie, działa dobrze. ale kiedy wstawiam dane przez aplikację js węzła. nawet nie wstawia danych do głównej tabeli. Nie ma żadnego błędu w wyzwalaczu i procedurze przechowywanej, ponieważ działa on z zapytaniem o bezpośrednią wstawkę dla tabeli.po uruchomieniu wyzwalacza nie działa, gdy wkładka dzieje się z węzła js app

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

kod wyzwalacza -

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

Przechowywane kod Procedura -

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 $$ 

używam bazy danych MySQL oraz silnik składowania jest InnoDB. Sprawdziłem kwerendę sql. tworzy się za pomocą SET Keyword. wykonuje zapytanie wstawiania Mysql z ustawioną obsługą słów kluczowych po wstawieniu procedury składowanej.

Problem został rozwiązany. była to nazwa tabeli we wszystkich literach w Mysql, a ja pisałem małymi literami. Nazwy tabel to "user" i "sensor". teraz jest rozwiązany.

+0

Nie dużo, że można wywnioskować z tego kawałka kodu, spróbuj odpowiedzieć w [mcve] (http://stackoverflow.com/help/mcve). – cviejo

+1

Możesz spróbować zarejestrować faktyczne zapytanie SQL używane podczas wywoływania 'dbObject.create (...)' i porównywania tego z wykonywaną ręcznie, aby sprawdzić, czy istnieje jakakolwiek rozbieżność – mzulch

+0

"to nawet nie wstawia danych do głównej tabeli "- oznacza to, że problem dotyczy wstawienia bazy danych node.js. Nie można zidentyfikować problemu z udostępnionym fragmentem kodu. Proszę określić, którego db używasz i odpowiadający mu fragment kodu. – Damodaran

Odpowiedz

1

Polecam również użyć return w miejscach, w których sprawdzasz błędy, w przeciwnym razie kod będzie kontynuowany i nie zatrzyma się w przypadku błędów.

Spróbuj użyć tego kodu:

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

Umm, to dosłownie dokładny kod, którego używa. – miken32

+0

@ miken32 Umm, zredagował swoje oryginalne pytanie, aby dodać oświadczenia zwrotne po tym, jak zostały opublikowane. – Chev

+0

Haha, przepraszam za to. Nadal nie odpowiada na pytanie. – miken32