Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Necesito Ejemplo de Trigger (https://www.clubdelphi.com/foros/showthread.php?t=85470)

José Luis Garcí 21-03-2014 10:17:08

Necesito Ejemplo de Trigger
 
Hola compañeros, podían ponerme, cual es la función exacta de un trigger y un ejemplo de el mismo para firebird, pero lo más claro posible, lo he buscado en internet, pero me resulta algo lioso de entender.

Como siempre gracias de antemano.

MartinS 21-03-2014 13:18:55

Cita:

Empezado por José Luis Garcí (Mensaje 474131)
Hola compañeros, podían ponerme, cual es la función exacta de un trigger y un ejemplo de el mismo para firebird, pero lo más claro posible, lo he buscado en internet, pero me resulta algo lioso de entender.

Como siempre gracias de antemano.

Hola Jose Luis: Fijate por aqui a partir de la pagina 4 que se trato hace un tiempo la forma de capturar eventos (por poner un ejemplo) y se usan precisamente los trigger o disparadores para tal fin. Por ahí te da una idea de para que sirven.
Los trigger se utilizan para realizar alguna tarea cuando ocurre algo en la base de datos (cuando se inserta, se edita, se refresca, etc).-

Saludos.-

Casimiro Notevi 21-03-2014 14:05:19

Ese hilo de ejemplo no es buen ejemplo, sino todo lo contrario, además no es sobre triggers sino sobre transacciones.

cloayza 21-03-2014 16:07:38

Bueno aquí un pequeño aporte.

Los disparadores son un elemento importante entre las capacidades proporcionadas por
firebird para la implementación de las reglas de negocio centralizadas.

Un disparador se ejecuta cuando se realiza una solicitud que va a cambiar el estado de los datos en una tabla. Estos se ejecutan a nivel de registro y son parte de la trasacción que cambia el estado de un registro.

Los disparadores pueden ser ejecutados en 2 faces, y son aplicados a uno de los tres eventos:

Faces
- before (antes)
- after (después)
Eventos
- Inserting (inserción)
- Updating (actualización)
- Deleting (eliminación)

Por supuesto las faces y eventos se pueden combinar

Before Insert: Antes de insertar
After Insert: Después de insertar

Before Update: Antes de actualizar
After Update: Después de acualizar

Before Delete: Antes de eliminar
After Delete: Después de eliminar

Otro punto importante es que dentro de estos eventos se puede acceder a los valores de los campos del registro a traves de las variables NEW y OLD.

Las variables NEW.* tienen valor en los eventos de INSERT y UPDATE, OLD.* en los eventos UPDATE y DELETE

Hay que tener presente que NEW.* y OLD.* tienen valores nulos en los eventos DELETE y INSERT.


La pregunta que surge es para que usar estos variables NEW.* y OLD.*, bueno la respuesta es:

- Asignar valores iniciales validos bajo ciertas condiciones
- validar o transformar los datos ingresados
- Asignar claves y valores para actualizar otras tablas
- Asignar claves auto-incrementales.

Ejemplos reales:
BEFORE INSERT OR UPDATE:
Código SQL [-]
CREATE OR ALTER TRIGGER AREAS_BI FOR AREAS
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
AS
DECLARE VARIABLE EDADCLAVE SMALLINT; --Declaración de variables locales
BEGIN
     --Verificar si el campo CLAVE es nulo
     IF (NEW.ID_AREA IS NULL) THEN
         NEW.ID_AREA = GEN_ID(GEN_AREAS_ID,1); --Asignar valor generado por GEN_ID

     --Verificar si el campo es nulo y asignar fecha actual
     IF (NEW.CREADA_ARE IS NULL) THEN
        NEW.CREADA_ARE=CURRENT_DATE;

     IF (NEW.MODIF_ARE IS NULL) THEN
        NEW.MODIF_ARE=CURRENT_DATE;

     -verificar si campo es nulo y asignar valor cero
     IF (NEW.ORIGEN_ARE IS NULL) THEN
         NEW.ORIGEN_ARE=0;

     --Valida la Edad Clave.
     IF ((NEW.EDADKEY IS NULL) OR (NEW.EDADKEY=0))  THEN
     BEGIN
          --Obtener un dato de otra tabla y asignarla al vampo NEW.EdadKey
          SELECT EDADKEY
          FROM SIMULADOR
          WHERE SIMULADOR.ID_SIM=NEW.ID_SIM
          INTO :EDADCLAVE;

          NEW.EDADKEY=:EDADCLAVE;
     END
END
AFTER UPDATE:
Código SQL [-]
CREATE OR ALTER TRIGGER INFORMES_AU0 FOR INFORMES
ACTIVE AFTER UPDATE POSITION 0
AS
BEGIN
     --Actualiza todos los informes de las áreas
     --cuando se produce algun cambio en la definición
     --de los informes del sistema
     UPDATE AREAS_INFORMES
     SET AREAS_INFORMES.EDADES_AIN=NEW.EDADES_INF,
            AREAS_INFORMES.MARCADO_AIN=1,
            AREAS_INFORMES.FILE_AIN=NEW.FILE_INF,
            AREAS_INFORMES.VARIABLES=NEW.VARIABLES
     WHERE AREAS_INFORMES.ID_INF=NEW.ID_INF;
END

Espero que sea de utilidad, Saludos cordiales

ecfisa 21-03-2014 16:21:38

Hola José.

Algunos enlaces para ampliar:
Saludos :)

José Luis Garcí 21-03-2014 16:36:07

gracias compañeros ya tengo material de estudio, a ver si me aclaro

fjcg02 21-03-2014 19:50:48

Hola compañero,
Ya veo que te han ayudado , pero si necesitas algo más, a tu disposición, me mandas un privado y te llamo si hace falta, a condición de que lo que hagamos lo publiquemos en el Club.

Saludos

MAXIUM 21-03-2014 21:24:47

Demos los créditos a http://firebird21.wordpress.com/2014...do-un-trigger/

cloayza 21-03-2014 21:39:33

Cita:

Empezado por MAXIUM (Mensaje 474170)

Recojo el guante que usted a arrojado...

En primer lugar si tiene la amabilidad de comparar los textos vera que solo son coincidencias. Es cierto que debí colocar la fuente pero no tiene nada que ver con lo que usted indica. Lamento la ligereza con que hace tal afirmación.

La información que escribi fué por conocimientos propios y apoyado en fragmentos traducidos por mi de:

The Firebird Book
A Reference for Database Developers

Autora: Helen Borrie
Capitulo 31: Triggers, páginas 641, 642, 646, 674.

El código fuente de los script sql es de mi creación.

Saludos cordiales

José Luis Garcí 21-03-2014 22:16:59

Cita:

Empezado por fjcg02 (Mensaje 474162)
Hola compañero,
Ya veo que te han ayudado , pero si necesitas algo más, a tu disposición, me mandas un privado y te llamo si hace falta, a condición de que lo que hagamos lo publiquemos en el Club.

Saludos

Eso siempre compañero, la semana que viene cuando me vaya nuevamente a caceres, me llevare los temas y los estudiare con calma

Cita:

Empezado por MAXIUM (Mensaje 474170)

Es bueno a hacer referencia, de donde vienen los datos, si se puede

Cita:

Empezado por cloayza (Mensaje 474172)
Recojo el guante que usted a arrojado...

En primer lugar si tiene la amabilidad de comparar los textos vera que solo son coincidencias. Es cierto que debí colocar la fuente pero no tiene nada que ver con lo que usted indica. Lamento la ligereza con que hace tal afirmación.

La información que escribi fué por conocimientos propios y apoyado en fragmentos traducidos por mi de:

The Firebird Book
A Reference for Database Developers

Autora: Helen Borrie
Capitulo 31: Triggers, páginas 641, 642, 646, 674.

El código fuente de los script sql es de mi creación.

Saludos cordiales

No creo que sea una acusación, en si, de todas maneras a mi ya me acusaron de plagio, por lo privado y la verdad es que es un palo.


Gracias a todos


La franja horaria es GMT +2. Ahora son las 11:58:40.

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