我正在MySQL中创建一个触发器,该触发器应设置一个变量并使用它来更新表。但是我找不到合适的语法来实现这项工作。
这是我尝试过的:
CREATE TRIGGER after_assinatura_update AFTER UPDATE
ON documento_eletronico_assinatura
FOR EACH ROW
BEGIN
SET @prox_ass = (
SELECT dea.usuario_id
FROM documento_eletronico_assinatura dea
INNER JOIN usuario u ON dea.usuario_id = u.id
WHERE dea.documento_id = NEW.documento_id
AND dea.assinatura = 0
ORDER BY dea.posicao ASC
LIMIT 1
);/*ERROR: statement incomplete, expecting: ';'*/
UPDATE documento_eletronico
SET documento_eletronico.prox_assinatura = @prox_ass
WHERE documento_eletronico.id = NEW.documento_id;
CREATE TRIGGER after_assinatura_update AFTER UPDATE
ON documento_eletronico_assinatura
FOR EACH ROW
UPDATE documento_eletronico
SET documento_eletronico.prox_assinatura = @prox_ass
WHERE documento_eletronico.id = NEW.documento_id;
/*TRIGGER stops here and doesn't set the variable. Adding a BEGIN gives the "expected: ';'" at The line above.*/
SET @prox_ass = (
SELECT dea.usuario_id
FROM documento_eletronico_assinatura dea
INNER JOIN usuario u ON dea.usuario_id = u.id
WHERE dea.documento_id = NEW.documento_id
AND dea.assinatura = 0
ORDER BY dea.posicao ASC
LIMIT 1
);
答案 0 :(得分:1)
您可能只需要一个DELIMITER
语句。但是,您可以将其表示为一个语句:
SET @prox_ass = (
/*ERROR: statement incomplete, expecting: ';'*/
UPDATE documento_eletronico de CROSS JOIN
(SELECT dea.usuario_id
FROM documento_eletronico_assinatura dea JOIN
usuario u
ON dea.usuario_id = u.id
WHERE dea.documento_id = NEW.documento_id AND
dea.assinatura = 0
ORDER BY dea.posicao ASC
LIMIT 1
) u
);
SET de.prox_assinatura = u.usuario_id
WHERE de.id = NEW.documento_id;