如果ELSE UPDATE,Mysql触发麻烦

时间:2012-10-22 14:49:55

标签: java mysql if-statement triggers delimiter

delimiter //
CREATE TRIGGER agregarMateriaCurso AFTER INSERT ON MateriasDoctorado
   FOR EACH ROW
BEGIN
   IF (SELECT troncal FROM Materias WHERE codigo=NEW.codigoMateria)=1
        THEN
            UPDATE CursoDoctorado SET cantidadMateriasTroncales=cantidadMateriasTroncales+1 WHERE codigo=NEW.codigoDoctorado;
   ELSE
         UPDATE CursoDoctorado SET cantidadMateriasEspecificas=cantidadMateriasEspecificas+1 WHERE codigo=NEW.codigoDoctorado;
        END IF;
END;//
delimiter ;

public class Consulta {

    public static String[] triggers = {
         "delimiter // CREATE TRIGGER agregarMateriaCurso AFTER INSERT ON MateriasDoctorado    FOR EACH ROW  BEGIN  IF (SELECT troncal FROM Materias WHERE codigo=NEW.codigoMateria)=1         THEN            UPDATE CursoDoctorado SET cantidadMateriasTroncales=cantidadMateriasTroncales+1 WHERE codigo=NEW.codigoDoctorado;   ELSE         UPDATE CursoDoctorado SET cantidadMateriasEspecificas=cantidadMateriasEspecificas+1 WHERE codigo=NEW.codigoDoctorado;        END IF; END;// delimiter ;", "delimiter // CREATE TRIGGER eliminarMateriaCurso AFTER DELETE ON MateriasDoctorado   FOR EACH ROW BEGIN   IF (SELECT troncal FROM Materias WHERE codigo=OLD.codigoMateria)=1        THEN            UPDATE CursoDoctorado SET cantidadMateriasTroncales=cantidadMateriasTroncales-1 WHERE codigo=OLD.codigoDoctorado;    ELSE            UPDATE CursoDoctorado SET cantidadMateriasEspecificas=cantidadMateriasEspecificas-1 WHERE codigo=OLD.codigoDoctorado;        END IF; END;// delimiter ; "
    };
}


 for(String sentencia:Consulta.triggers){
                System.out.println(mysqli.update(sentencia));
            }
  

您的SQL语法有错误;检查手册   对应于您的MySQL服务器版本,以便使用正确的语法   在'delimiter //附近创建TRIGGER agregarMateriaCurso后插入   MateriasDoctorad'在第1行

3 个答案:

答案 0 :(得分:1)

第一个问题是缺少单词begin,第二个问题是java的触发器插入并解决了删除“分隔符//”。

答案 1 :(得分:0)

错过了BEGIN关键字,请尝试此查询 -

DELIMITER //
CREATE TRIGGER agregarMateriaCurso AFTER INSERT ON MateriasDoctorado FOR EACH ROW
BEGIN
  IF (SELECT troncal FROM Materias WHERE codigo = NEW.codigoMateria) = 1 THEN
    UPDATE CursoDoctorado SET cantidadMateriasTroncales = cantidadMateriasTroncales + 1 WHERE codigo = NEW.codigoDoctorado;
  ELSE
    UPDATE CursoDoctorado SET cantidadMateriasEspecificas = cantidadMateriasEspecificas + 1 WHERE codigo = NEW.codigoDoctorado;
  END IF;
END;//
DELIMITER ;

答案 2 :(得分:0)

我认为你在for循环中缺少BEGIN:

->    FOR EACH ROW BEGIN
->    IF (SELECT troncal FROM Materias WHERE codigo=NEW.codigoMateria)=1
->         THEN
->             UPDATE CursoDoctorado SET cantidadMateriasTroncales=cantidadMateriasTroncales+1 WHERE codigo=NEW.codigoDoctorado;
->    ELSE
->          UPDATE CursoDoctorado SET cantidadMateriasEspecificas=cantidadMateriasEspecificas+1 WHERE codigo=NEW.codigoDoctorado;
->         END IF;
-> END;//