Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-03-2014
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 22
José Luis Garcí Va camino a la fama
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.
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
  #2  
Antiguo 21-03-2014
MartinS MartinS is offline
Miembro
NULL
 
Registrado: nov 2011
Ubicación: Villa Cacique - Argentina
Posts: 283
Poder: 13
MartinS Va por buen camino
Cita:
Empezado por José Luis Garcí Ver Mensaje
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.-
Responder Con Cita
  #3  
Antiguo 21-03-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Ese hilo de ejemplo no es buen ejemplo, sino todo lo contrario, además no es sobre triggers sino sobre transacciones.
Responder Con Cita
  #4  
Antiguo 21-03-2014
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 913
Poder: 22
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
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
Responder Con Cita
  #5  
Antiguo 21-03-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola José.

Algunos enlaces para ampliar:
Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 21-03-2014
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 22
José Luis Garcí Va camino a la fama
gracias compañeros ya tengo material de estudio, a ver si me aclaro
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
  #7  
Antiguo 21-03-2014
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
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
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #8  
Antiguo 21-03-2014
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.488
Poder: 20
MAXIUM Va camino a la fama
Demos los créditos a http://firebird21.wordpress.com/2014...do-un-trigger/
Responder Con Cita
  #9  
Antiguo 21-03-2014
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 913
Poder: 22
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Cita:
Empezado por MAXIUM Ver Mensaje
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
Responder Con Cita
  #10  
Antiguo 21-03-2014
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 22
José Luis Garcí Va camino a la fama
Cita:
Empezado por fjcg02 Ver Mensaje
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 Ver Mensaje
Es bueno a hacer referencia, de donde vienen los datos, si se puede

Cita:
Empezado por cloayza Ver Mensaje
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
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
necesito ejemplo de como usar TTAB federiconqn21 Varios 3 02-05-2008 15:45:21
Necesito ejemplo de Tservices QuarkBcn OOP 4 26-06-2007 22:05:29
Un trigger que dispara un procedimiento que dispara un trigger... sitrico Firebird e Interbase 5 04-06-2007 22:05:13
ejemplo de rup droguerman OOP 3 02-03-2007 18:15:07
Ejemplo de OOP David OOP 5 07-11-2006 15:02:07


La franja horaria es GMT +2. Ahora son las 14:07:22.


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
Copyright 1996-2007 Club Delphi