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

Trigger Insert

Estas en el tema de Trigger Insert en el foro de Mysql en Foros del Web. Hola de nuevo, como podria poner este trigger, para que a la hora de hacer una insercción de una persona, que sea menor de 65 ...
  #1 (permalink)  
Antiguo 27/02/2011, 12:01
 
Fecha de Ingreso: febrero-2011
Mensajes: 3
Antigüedad: 13 años, 2 meses
Puntos: 0
Trigger Insert

Hola de nuevo, como podria poner este trigger, para que a la hora de hacer una insercción de una persona, que sea menor de 65 años no me deje y me de un error, pero a la hora de insertar una mayor de 65 si me deje.

Esto es lo que tengo por ahora:

CREATE TRIGGER valida BEFORE INSERT ON pacientes
FOR EACH ROW
BEGIN

declare error varchar(50);
declare edad int;

set error = "No se puede introducir personas menores de 65 años";
set edad =year(curdate()-year(pacientes.fnaci);

IF (edad > 65) THEN
insert into pacientes values (new.dni,new.nombre,new.fnaci,new.rnhabi,new.fentr ada,new.fsalida);
ELSE
select error;

END IF;
  #2 (permalink)  
Antiguo 27/02/2011, 15:28
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: Trigger Insert

MySQL no te permite generar un rechazo de inserción en un trigger. Un trigger se dispara ante un evento específico, sea antes o después de él, pero no permite cancelar la acción que lo disparó.
Además, tampoco se puede hacer operaciones DML como las indicas, en la misma tabla donde está el trigger en ejecución, porque la tabla está bloqueada.
Por lo demás, lo que quieres hacer es una validación en base, cuando lo que deberías hacer (y es lo que se hace) es una validación en la aplicación.
¿Qué sentido tiene enviarle a la base una inserción que antes de enviar se sabe que será rechazada?
En tu caso, pasa lo mismo que en este otro: Duda procedimiento y la respuesta sigue siendo válida: La aplicación es la que debe controlar que el usuario no pueda ingresar datos incorrectos y no la base de datos. Plantearlo al revés es un error conceptual y de procesos. ¿Para qué lanzar una consulta, que requiere tiempo de comunicación, procesador y lectura de disco, si sabes a priori que no podrá responderla porque no se cumplen con los requerimientos del modelo de negocio?.

Regla general de desarrollos con soporte de base de datos (aprendida en clase y luego probada por experiencia): No se usa la base de datos para hacer validaciones. Las validaciones se hacen en la aplicación y de ser necesario, los datos que se piden a la base, pero no se valida en ella.

Nota: hay DBMS que te permiten alternativas ante un caso determinado, es decir, derivan el proceso a otra rutina o a otra acción, pero MySQL no lo hace. Como tampoco cuenta con constraints CHECK, no se puede aplicar ese concepto, por lo que mi recomendación es que programes más ortodoxamente: Valida en la aplicación.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: insert, trigger
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 17:27.