Ver Mensaje Individual
  #5 (permalink)  
Antiguo 12/05/2008, 08:30
Avatar de gnzsoloyo
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
Re: Problema con trigger

El BEGIN es el inicio del cuerpo de un procedimiento, sea TRIGGER, FUNCTION o PROCEDURE. Eso quiere decir que TODAS las sentencias deben ir DENTRO de esa sección.
[code]

CREATE TRIGGER assign BEFORE INSERT ON belongs_to AS
BEGIN
IF
(SELECT COUNT(*)
FROM belongs_to
WHERE id_user=NEW.id_user
AND id_module=NEW.id_module
AND id_ir=NEW.id_ir
AND date_finsih=null) > 0
/*Esta funcion no existe. El SQL no es un lenguaje de programación */
print "Ya existe esa asignacion"
/* No puedes deshacer una transacción en un trigger. No se inicia en él. */
ROLLBACK TRANSACTION;
END ;

Hay algunos errores conceptuales:
- Un trigger sirve para realizar operaciones ante determinados eventos, pero no para interrumpirlos. Un trigger te permite hacer validaciones, pero el proceso del evento no se interrumpe. Solamente manipulas los datos y/o generas otros en otra tabla.
- Las validaciones que estás intentando se deben hacer ANTES de enviar los datos a la tabla.
- Las validaciones de ese tipo no requieren estos procesos. Se pueden controlar con los índices UNIQUE de claves por múltiples campos.
- Las validaciones de NOT NULL, se pueden controlar en la definición de la tabla.
- Fíjate bien en las sentencias de SQL. No pongas lo que no pertenece al SQL. Te dará error de sintaxis.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)