插入触发器在插入发生从节点js应用程序不起作用后
我有一个后插入触发器。 调用一个存储的过程。当我运行一个直接查询它运作良好。 但是当我通过节点js应用程序插入数据。 它甚至不在主表中插入数据。 触发器和存储过程中没有任何错误,因为它与表的直接插入查询一起工作。
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。 我已经检查了SQL查询。 它正在与SET关键字形成。 插入存储过程后,Mysql是否使用set关键字支持插入查询?
问题现在解决了。 它是Mysql中所有大写字母的表名,而且我用小写字母表写的名字是“user”和“sensor”。 现在解决了。
我也build议在检查错误的地方使用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); }); });
- Electron的BrowserWindow zoomFactor可以在施工后更改吗? 以及如何select最近的邻居,而不是平滑?
- 我怎样才能将一个JSON数组从NodeJSstream到postgres