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.
Nie dużo, że można wywnioskować z tego kawałka kodu, spróbuj odpowiedzieć w [mcve] (http://stackoverflow.com/help/mcve). – cviejo
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
"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