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構文にエラーがあります。'delimiterの近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください//1行目の「MAteriasDoctoradに挿入した後のトリガーagregarMateriaCurso」を作成します

4

3 に答える 3

1

最初の問題はbeginという単語の欠落であり、2番目の問題は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 に答える