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

Trigger sobre un delete y hacer insert

Estas en el tema de Trigger sobre un delete y hacer insert en el foro de Mysql en Foros del Web. Hola a todos, tengo una base de datos con una tabla llamada gestiones, muchas veces eliminan información de esa tabla directamente desde la base de ...
  #1 (permalink)  
Antiguo 04/04/2010, 09:31
 
Fecha de Ingreso: abril-2006
Ubicación: Bogotá
Mensajes: 251
Antigüedad: 18 años
Puntos: 14
Trigger sobre un delete y hacer insert

Hola a todos, tengo una base de datos con una tabla llamada gestiones, muchas veces eliminan información de esa tabla directamente desde la base de datos, es decir con un DELETE (inevitable jejee) ... pero como medida posterior a una auditoria o para recuperar una gestión.

Se me ocurre hacer un trigger que se dispare cuando haya un evento delete, pero no sé como hacer para que efectivamente me borre el registro pero por otro lado me lo copie tal cual a otra tabla que sería como un log de lo eliminado.

Mi tabla de gestiones sólo cuenta con los campos:


Código:
idgestion | usgestion | detalle | fecha_creacion
De momento tengo lo siguiente pero me funciona sólo en SQL Server:
Código:
CREATE TRIGGER triDeleteGestion 
ON gestion
INSTEAD OF DELETE
AS
BEGIN
  DECLARE @idgestion INT
  DECLARE @us INT
  DECLARE @detalle TEXT
  DECLARE @fecha TIMESTAMP
  
  SELECT @idgestion = (SELECT idgestion FROM DELETED)
  SELECT @us = (SELECT usgestion FROM DELETED)
  SELECT @detalle = (SELECT detalle FROM DELETED )
  SELECT @fecha = (SELECT fecha_creacion FROM DELETED)
  
  IF( @idgestion <> '')
  BEGIN
     INSERT INTO log_gestion( idgestion, usgestion, detalle, fecha_creacion ) 
     VALUES(@idgestion, @us, @detalle, @fecha)
  END
  ELSE
  BEGIN
     RAISERROR('La gestión no existe')
  END
END
Espero me puedan ayudar!
  #2 (permalink)  
Antiguo 04/04/2010, 16:40
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 sobre un delete y hacer insert

1) INSTEAD OF... no existe en MySQL. Son alternativas de otros DBMS, como Oracle, SQL Server, etc.

2) Las variables locales de un procedimiento (TRIGGER o no), se declaran, pero no se usa "@" para definirlas. Simplemente se ponen sus nombres. El uso de "@" está reservado a variables de usuario, las cuales no se declaran sino que se inicializan (se asigna un valor), y son permanentes dentro y fuera del script mientras dura la sesión del usuario. Esto último hace que si se han usado antes, conserven su último valor, lo que puede dar lugar a errores.

3) Los bloques BEGIN/END no son anidables, sino que pueden ser consecutivos. Un anidamiento genera un error.

4) RAISERROR no existe en MySQL. Para gestionar errores se deben declarar HANDLERs, y tampoco se puede usar una sentencia que genere una salida de interfase, porque las mismas tampoco existen en MySQL.

Debes tener en cuenta que el lenguaje de programación de scripts y procedures no está estandarizado, por lo que es muy difícil realizar migraciones directas. Además, cada DBMS le pone sus propias extensiones al SQL, que solamente son útiles en el contexto de ese DBMS.
Antes de ponerte a copiar scripts de uno a otro DBMS lo que te conviene es primero leer el manual de referencia de ese DBMS y fijarte que es lo que realmente puede hacer y qué sentencias y cláusulas realmente existen.
__________________
¿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: delete, 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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 14:41.