当我的 TRIGGER 触发时,数据库行不会更新。 -- "#1242 - 子查询 returns 多于 1 行"
Database row wont update when my TRIGGER fires. -- "#1242 - Subquery returns more than 1 row"
我想在 table 'a' 中的列更新时在 table 'b' 中插入新行。但是当触发器以 UPDATE REQ SET status='approved' WHERE idReq=1;
触发时,它会抛出一条错误消息:
"#1242 - Subquery returns more than 1 row"
注意:我正在使用 MariaDB :)
这是我的触发器:
DELIMITER $$
CREATE TRIGGER asignarNotificacionReqEstatus
AFTER UPDATE ON REQ
FOR EACH ROW
BEGIN
SET @idReq = (SELECT idReq FROM REQ);
SET @idPetitioner = (SELECT petitioner FROM REQ);
IF OLD.status <> NEW.status THEN
INSERT INTO NOTIFICATION(dayTime, type, content)
VALUES (NOW(), 'requestAcepted',
CONCAT("{",
"'idReq' : '", @idReq, "', ",
"'petitioner' : '", @idPetitioner, "', ",
"}")
);
END IF;
END $$
DELIMITER ;
我阅读您的代码的假设是,您的第一条语句试图获取整个 REQ table 中的每个 idReq 并将其粘贴到 @idReq 变量中,因此出现错误。
您稍后已经在使用 OLD 和 NEW,因此您了解这些概念。我什至会尝试不使用变量,而只在 INSERT 块中使用 NEW.idReq 和 NEW.petitioner。
(我没有使用过 mariadb,所以我的回答是基于一般的 sql 知识和快速的互联网搜索。)
我想在 table 'a' 中的列更新时在 table 'b' 中插入新行。但是当触发器以 UPDATE REQ SET status='approved' WHERE idReq=1;
触发时,它会抛出一条错误消息:
"#1242 - Subquery returns more than 1 row"
注意:我正在使用 MariaDB :)
这是我的触发器:
DELIMITER $$
CREATE TRIGGER asignarNotificacionReqEstatus
AFTER UPDATE ON REQ
FOR EACH ROW
BEGIN
SET @idReq = (SELECT idReq FROM REQ);
SET @idPetitioner = (SELECT petitioner FROM REQ);
IF OLD.status <> NEW.status THEN
INSERT INTO NOTIFICATION(dayTime, type, content)
VALUES (NOW(), 'requestAcepted',
CONCAT("{",
"'idReq' : '", @idReq, "', ",
"'petitioner' : '", @idPetitioner, "', ",
"}")
);
END IF;
END $$
DELIMITER ;
我阅读您的代码的假设是,您的第一条语句试图获取整个 REQ table 中的每个 idReq 并将其粘贴到 @idReq 变量中,因此出现错误。
您稍后已经在使用 OLD 和 NEW,因此您了解这些概念。我什至会尝试不使用变量,而只在 INSERT 块中使用 NEW.idReq 和 NEW.petitioner。
(我没有使用过 mariadb,所以我的回答是基于一般的 sql 知识和快速的互联网搜索。)