![]() |
Aprendiendo a usar triggers en FB
Reconozco que hasta ahora me había ido bien sin usar estos elementos pero también reconozco que después de leer mucho tienen una potencia tremenda y son muy útiles. Bien: Tengo esta tabla:
![]() en la que quiero crear un trigger que se ejecute antes de actualizarla de forma que si el campo Estado vale 1 rechace la transación y no permita continuar. Para ello creo que el código habría de ser este: Código PHP:
![]() Pero una vez ejecutado aparentemente sin errores, si consulto las propiedades de la tabla me encuentro con esto: ![]() ¡No hay nimngún trigger creado! Pero si trato de ejecutar nuevamente el CREATE, IBManager (FB) me lanza un mensaje de error que me informa que Exception USUARIO_CONECTADO already exists. ¿Qué puedo estar haciendo mal? |
IBManager ¿qué programa es?
|
Cita:
|
¿Soporta tu versión de firebird?
¿Has probado con ibexpert? |
Cita:
|
En realidad en las sentencias tienes dos cosas.
Primero tienes la creacion de la excepcion. Luego tienes la creacion del trigger. Al parecer la excepcion se creo sin problemas por lo que deberias eliminar la primera sentencia de CREATE EXCEPTION. Y luego ejecuta solo la creacion del trigger. Saludos. |
Gracias por las respuestas. Ya he decubierto que está pasando: En el CREATE TRIGGER hay dos errores de sintaxis.
Primero he puesto INTO Usuarios en vez FROM Usuarios. Segundo me falta el THEN al final del IF. Al margen de eso la sugerencia de Osorio de partir en dos el código ha funcionado a la perfección. |
¿Y no muestra los mensajes de errores el manager que estás usando?
|
Sí, pero es que con el código que puse ayer no da ningún mensaje de error. El problema creo que viene, como apunta Osorio, de tratar de hacerlo todo junto. No daba error porque la excepción si la crea y ahí termina; al hacer las dos cosas por separado en el CREATE TRIGGER sí me daba lo errores.
|
Normalmente los "manager" tienen dos posibilidades: ejecutar una sentencia sql (create, select, insert, etc.) o ejecutar un script de múltiples sentencias. En tu caso debías ejecutar la segunda posibilidad. Seguro que el manager que has usado tiene esa opción.
|
Sí. Ya te digo que el error fue mio en el planteamiento.
|
¿Como quedaría finalmente el código corregido?
|
Cita:
EXCEPCIÓN Código PHP:
TRIGGER Código PHP:
|
La franja horaria es GMT +2. Ahora son las 23:30:21. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi