2
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 服务器版本相对应的手册,以在第 1 行的“分隔符 // CREATE TRIGGER agregarMateriaCurso AFTER INSERT ON MateriasDoctorad”附近使用正确的语法

4

3 回答 3

1

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

于 2012-11-12T16:01:23.310 回答
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 ;
于 2012-10-22T14:53:49.980 回答
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;//
于 2012-10-22T14:56:15.360 回答