Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] Error de sintaxis handlers

Estas en el tema de Error de sintaxis handlers en el foro de Mysql en Foros del Web. Hola, tengo el siguiente problema. Tengo el siguiente trigger, pero cuando voy a guardarlo me salta un error de sintaxis, he mirado en la página ...
  #1 (permalink)  
Antiguo 07/08/2013, 05:08
 
Fecha de Ingreso: marzo-2013
Mensajes: 22
Antigüedad: 11 años, 1 mes
Puntos: 0
Error de sintaxis handlers

Hola, tengo el siguiente problema.

Tengo el siguiente trigger, pero cuando voy a guardarlo me salta un error de sintaxis, he mirado en la página de MySQL y en varias páginas y su sintaxis es esta, pero no me funciona.
Código MySQL:
Ver original
  1.  DECLARE V_DEPTNO INT;
  2.  SELECT DEPTNO INTO V_DEPTNO FROM AUX_DEPT WHERE DEPTNO=NEW.DEPT_NO;
  3.  DECLARE EXIT HANDLER FOR SQLEXCEPTION
  4.     BEGIN
  5.         INSERT INTO AUX_DEPT VALUES (NEW.DEPT_NO, NULL, NULL);
  6.     END

Gracias de antemano
  #2 (permalink)  
Antiguo 07/08/2013, 05:16
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Error de sintaxis handlers

MySQL no admite BEGIN/END anidados.
Código MySQL:
Ver original
  1.    DECLARE V_DEPTNO INT;
  2.    DECLARE EXIT HANDLER FOR SQLEXCEPTION;
  3.    SELECT DEPTNO INTO V_DEPTNO FROM AUX_DEPT WHERE DEPTNO=NEW.DEPT_NO;
  4.    INSERT INTO AUX_DEPT VALUES (NEW.DEPT_NO, NULL, NULL);
Además, el handler debe ser siempre anterior a cualquier operación DML, y ser la última declaración escrita en el cuerpo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 07/08/2013, 05:23
 
Fecha de Ingreso: marzo-2013
Mensajes: 22
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: Error de sintaxis handlers

¿Entonces, como puedo hacer que cuando salte el handler ejecute una sentencia?
  #4 (permalink)  
Antiguo 07/08/2013, 05:47
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Error de sintaxis handlers

Ese no es el sentido de un SQLEXCEPTION.
En tu escenario, lo que podría ser es que no se encuentre el resultado del SELECT, pero eso no es una SQLEXCETION, sino un SQLWARNING, que no es lo mismo.
Lee el manual de referencia.

En cualquier caso, ni siquiera lo necesitarías, porque bien podrías hacer:
Código MySQL:
Ver original
  1.    DECLARE V_DEPTNO INT;
  2.    SET V_DEPNO = 0;
  3.    SELECT DEPTNO INTO V_DEPTNO FROM AUX_DEPT WHERE DEPTNO=NEW.DEPT_NO;
  4.    IF VDEPTNO IS NULL THEN
  5.        INSERT INTO AUX_DEPT VALUES (NEW.DEPT_NO, NULL, NULL);
  6.    END IF;
Pero si quieres, hazlo así:
Código MySQL:
Ver original
  1.    DECLARE V_DEPTNO INT;
  2.    DECLARE EXIT HANDLER FOR SQLEXCEPTION INSERT INTO AUX_DEPT VALUES (NEW.DEPT_NO, NULL, NULL);
  3.    SELECT DEPTNO INTO V_DEPTNO FROM AUX_DEPT WHERE DEPTNO=NEW.DEPT_NO;
  4.  

En cualquier caso, te advierto que si lo que deseas hacer es insertar un nuevo departamento en caso de no existir en su tabla, y este trigger es para una tabla donde ese ID es FK, este trigger no funcionará, porque la validación de la restricción FK se dispara antes que el TRIGGER.
Y si, en todo caso, estás haciendo un trigger sobre la propia tabla donde está definido, tampoco funcionará.
Te comento que usar triggers para este tipo de cosas es una muy mala idea. Es mejor poner la lógica de validaciones de esta clase en un procedure que realice todas las validaciones y acciones necesarias.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 07/08/2013, 05:53
 
Fecha de Ingreso: marzo-2013
Mensajes: 22
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: Error de sintaxis handlers

vale, muchas gracias

Etiquetas: insert, select, sintaxis, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:40.