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

Trigger before insert

Estas en el tema de Trigger before insert en el foro de Mysql en Foros del Web. Hola a todos, os escribo porque estoy bastante desorientado a la hora de realizar una tarea que tengo ahora entre manos. Estoy intentando crear un ...
  #1 (permalink)  
Antiguo 18/05/2012, 15:47
 
Fecha de Ingreso: septiembre-2009
Mensajes: 38
Antigüedad: 14 años, 7 meses
Puntos: 0
Trigger before insert

Hola a todos, os escribo porque estoy bastante desorientado a la hora de realizar una tarea que tengo ahora entre manos. Estoy intentando crear un trigger que antes de insertar una fila compruebe si esa fila este o no; en caso negativo la inserta y sino la omite y no hace nada con ella.

La idea que tengo es la siguiente.

CREATE FUNCTION funcion() returns TRIGGER AS
$$
declare
contador record;
Begin
SELECT INTO contador count(*) AS total FROM alumno WHERE nombre=new.nombre;
IF contador.total = 0 then
INSERT INTO alumno WHERE old.idalumno=id_familia, old.nombre=nombre, old.edad=edad;
end IF;
RETURN old;
End;

Pero no me crea esta función ya que:

Error Code: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FUNCTION eliminar_nino() returns TRIGGER AS
$$
declare
contador record' at line 1

Gracias
  #2 (permalink)  
Antiguo 18/05/2012, 18:32
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 before insert

No existe un tipo de dato TRIGGER.
__________________
¿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 20/05/2012, 06:48
 
Fecha de Ingreso: mayo-2012
Mensajes: 42
Antigüedad: 11 años, 11 meses
Puntos: 5
Respuesta: Trigger before insert

Hola planets,

Revisa la sintaxis de [URL="http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html"]Trigger[/URL] creo que andas un poco pez :)

Para lo que pides sería una cosa así:

Código SQL:
Ver original
  1. DROP TRIGGER IF EXISTS tr_bf_ins_exists;
  2. delimiter $$
  3. CREATE TRIGGER tr_bf_ins_exists BEFORE INSERT ON tbl FOR each ROW BEGIN
  4.     DECLARE msg VARCHAR(255);
  5.    
  6.     IF EXISTS (SELECT * FROM tbl WHERE nombre=NEW.nombre) THEN
  7.         SET msg= concat('TriggerERROR: "',NEW.nombre,'" . Ya existe.');
  8.         signal sqlstate '45000' SET message_text = msg;
  9.     END IF;
  10.    
  11. END$$
  12. delimiter ;

Lo que hace es comprobar si existe un registro con el mismo nombre,si existe salta un error.

¡Un saludo!

Última edición por davikt; 20/05/2012 a las 06:59
  #4 (permalink)  
Antiguo 20/05/2012, 07:39
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 before insert

Deberías aclararle dos cosas antes de proponer usar SIGNAL:
1) Sólo es aplicable a servidores de Base de datos que tengan instalado MySQL 5.5.x o superior.
2) Genera una salida de excepción o error, lo que implica que tienes que administrar en la aplicación el error devuelto por MySQL.

Aún así, como ya dije en el post paralelo, no es una buena práctica hacer validaciones en triggers. Es propio de programadores, pero no de diseñadores de base de datos.
__________________
¿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, select, sql, 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 15:46.