Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   ayuda porfavor!! (https://www.clubdelphi.com/foros/showthread.php?t=60845)

CLUSTERBIT 15-10-2008 21:43:21

ayuda porfavor!!
 
hola bueno me presento soy nuevo en el foro y tengo una consulta que me tiene aflijido

tengo que hacer un trigger que mande los datos de una tabla que se ingresan o se modifiquen de cada campo en otro campo de otra tabla
solo espero un ejemplo lo que sea

espero me ayuden

los felisito por el foro

duilioisola 16-10-2008 07:49:35

Bienvenido !!!

Ante todo, tómate un tiempo para leer la Guia de Estilo. En ella verás que "Ayuda Por Favor" no nos cuenta nada de tu problema y no ayuda en las búsquedas.

También deberías especificar para qué motor de base de datos necesitas el trigger.

Si es Firebird, necesitarás dos triggers : uno para insertar y otro para la modificación.

Código SQL [-]
CREATE TRIGGER TABLA_BI0 FOR TABLA BEFORE INSERT
AS
BEGIN
   INSERT INTO SEGUNDA_TABLA(CAMPO_EN_SEGUNDA_TABLA) VALUES (NEW.CAMPO);
END

CLUSTERBIT 16-10-2008 15:12:45

hola duilioisola bueno disculpas no lo sabia jejeje...
bueno gracias por responder a mi demanda

todo esto lo tengo que hacer en mysql
y esto es lo que hice

CREATE TRIGGER prueba AFTER INSERT ON td_persona
FOR EACH ROW
BEGIN
INSERT INTO ts_auditoria(pers_id,perf_id,audi_ip,audi_fecha,audi_tabla,audi_campo,audi_valor_anterior,audi_valor _actual) VALUES((SELECT MAX(pers_id) AS pers_id FROM td_persona),(SELECT MAX(inst_id) AS inst_id FROM td_persona),1,(SELECT (DATE_FORMAT(CURDATE(),'%d/%m/%y')))',1,1,1,1);
END;

ahora mi problema es que los campos que tienen un 1 no se como podria extraer los registros de la tabla td_persona y enviarlos a esos campos que me faltan de la tabla ts_auditoria

saludos

duilioisola 16-10-2008 15:29:35

No conozco MySQL, pero se que es parecido.

Dentro de un Trigger puedes ver el valor de los campos de la tabla precediendolos con "NEW." .

Supongamos que TD_PERSONA tiene los campos pres_id, nombre,direccion,telefono,...

El trigger quedaría más o menos así:
Código SQL [-]
CREATE TRIGGER prueba AFTER INSERT ON td_persona
FOR EACH ROW
BEGIN
   INSERT INTO ts_auditoria(pers_id,nombre,direccion)
   VALUES(NEW.pers_id,NEW.nombre,NEW.direccion);
END;

duilioisola 16-10-2008 15:33:30

Esto está MUY mal:

Código SQL [-]
INSERT INTO ts_auditoria(pers_id,perf_id,audi_ip,audi_fecha,audi_tabla,audi_campo,audi_valor_anterior,audi_valor _actual) VALUES((SELECT MAX(pers_id) AS pers_id FROM td_persona),

Debes reemplazarlo por NEW.ID_PERSONA.
El problema es que el máximo de ID_PERSONA no necesariamente será el ID_PERSONA del registro que estás insertando.
Lo mismo con INST_ID. Puede que estés insertando una "Instancia" y que otro haya insertado una posterior y estarías mezclando información.

duilioisola 16-10-2008 15:39:20

Los campos de la tabla que ves en los trigger precedidos por NEW. o por OLD. son los campos del registro actual..
(Por lo menos en Firebird)

El prefijo NEW, lo verás en los triggers de Insert y Update.
El prefijo OLD, lo verás en los triggers de Update y Delete.

Un ejemplo es poder saber si ha cambiado algo.

Código SQL [-]
TRIGGER UPDATE
BEGIN
   IF (NEW.PRECIO<>OLD.PRECIO) THEN
   BEGIN
      /* Recalculo comisiones... */
      /* ... */ 
   END
END

CLUSTERBIT 16-10-2008 15:53:23

jejeje... perdon si tenia un despelote es que recien estoy aprendiendo esto de consultas de base de datos

hare la prueba y te cuento como me fue muchisimas gracias :) duilioisola


La franja horaria es GMT +2. Ahora son las 07:08:50.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi