Informix - Trigger

 
Vista:

Trigger

Publicado por Omar (2 intervenciones) el 30/03/2007 12:22:47
Hola, estoy intentando crear un trigger en informix, la sintáxis que he encontrado es la siguiente:

CREATE TRIGGER nombreTrigger INSERT ON nombreTabla1
REFERENCING NEW as new
FOR EACH ROW(
IF condición1 THEN UPDATE nombreTabla2 SET columna = valor WHERE condición2
END IF
);

Pero me da un error sintáctico que no me lo especifica, he probado sin el IF y sí lo acepta y es al añadir el IF cuando falla.He estando probando todas las combinaciones que se me han ocurrido pero no tuve éxito con ninguna
Alguien tiene alguna segerencia?
Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Trigger

Publicado por Jaime Arvizu (6 intervenciones) el 10/04/2007 19:11:30
Quer tal Omar

Lo que sucede es que los triggers por su naturaleza de ser procesos llamados por eventos del objeto de bd, no soportan iteraciones ni tampoco sentencias, yo te recomendaria reforzar tu logica con el llamado de un store dentro de un trigger, de hecho los store procedures siempre van muy juntos a los triggers, es decir los stores serian la logica y los trigger serian los detonadores para lanzar esa logica. Espero no haberte confundico mas.

Ejemplo del llamado de un store dentro de un trigger, pasandole parametros.

create trigger act_histrfc update of reg_fed_caus on retailer
referencing old as retail_old new as retail_new
for each row
(
execute procedure act_histrfc(
retail_old.distrib_id ,retail_ol
d.nemonico ,retail_new.reg_fed_caus
)
);

Ahora si lo que quieres es poner un condicinal directamente en el trigger, es un poco mas
dificil pero si se puede con la sentencia "when". ejemplo.

CREATE TRIGGER test1
DELETE ON customer_table
REFERENCING OLD AS original
FOR EACH ROW WHEN (original.balance>0)
(
INSERT INTO notpaid
VALUES(original.customer_id, original.balance)
);

Te recomiendo usar el tiempo de ejecucion es decir el momento en el que se encuentra el proceso que le hayas indicado al trigger, con esto puedes tener un mayor control de errores y puedes hacer uhn roll back en caso de haberse presentado algun problema.

de hecho esta tecnica la utilizo para las actualizaciones en cascada en tablas referenciales es muy efectivo asi evitas errores al momento de la captura y el cliente se vuelve menos pesado.

CREATE TRIGGER test1
UPDATE OF balance ON customer_table
REFERENCING OLD AS original NEW AS newversion

BEFORE WHEN (original.balance=0)
(
EXECUTE PROCEDURE
track_balance (original.balance)
)

AFTER (
EXECUTE PROCEDURE adust_worth (newversion.balance)
);

** codigo de los dos ultimos ejemplos sacados del libro Informix Unleashed.

Espero te sriva lo anterior.

Saludos!!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Parametros Store Procedure

Publicado por David Miguel (1 intervención) el 20/05/2008 01:39:36
Hola.
Me gustaria saber si a un Store procedure se le puede mandar como parámetro un registro completo????????????????

ej
CREATE PROCEDURE proc_temp ( costumer record like cliente.*)

END PROCEDURE

Se puede hacer lo anterior????????????????????????????
y si se puede realizar, me podrian decir cuál es la sintaxis,
por favor.

De antemano, gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Trigger

Publicado por julieth (2 intervenciones) el 25/11/2008 05:54:17
tengo que saber como se conecta php con informix pero bueno ese no es el problema el problema esque no se si los triggers se hacen normal o hay que hacerlos de otra forma necesito ayuda estoy super confundida..........
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Trigger

Publicado por Jaime A. Arvizu (6 intervenciones) el 28/07/2010 21:48:35
JULIETH..

Un poco tarde pero espero te sirva.

Mira en cualquier lenguaje lo unico por lo cual te debes de preocupar es por la sintaxis para definir o instanciar el llamado a tus objetos de base de datos, es decir, en php debes de definir tu conector de informix despues defines o instancias el store procedure que se convertiria en un seudo objeto y ya de ahi haces el llamado sobre esa definicion en tu codigo php.

Ahora quiero mencionarte que los trigers no son llamados desde ningu lenguaje de programacion, son funciones internas de los objetos de base de datos, es decir es algo asi como si fuera un evento de un objeto en tu programacion.

Por ejemplo no puedes llamarle a un evento de un boton hecho en visualbasic y depues tratar de disparar ese evento desde tu codigo en java a menos que exista una dll que l ahaga de api para ese caso.

Asi, los triggers solo funcionan cuando se cumple el condicional o comportamiento que definiste en la tabla a la cual pertenece dicho trigger, es decir puede ser de update, insert o delete.

saludos!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Trigger

Publicado por Jorge Luis (1 intervención) el 22/10/2009 00:39:14
UFF estuvo super lo de trigger condicional, muchas gracias me volvia loco no encontraba como funcionaba en informix, saludos...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Triger tri_dtinvfis

Publicado por pimus (1 intervención) el 24/10/2007 23:03:05
Ejemplo de triger----
create trigger "root".tri_productos insert on "root".productos
referencing new as nnew
for each row
(
update "root".movimientos set "root".movimientos.ca_fisicas
= (ca_fisicas + nnew.ca_fisicas ) where ((c_invfis = nnew.c_invfis
) AND (c_barra = nnew.c_barra ) ) );
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar