Tuesday, May 20, 2008

Re: [pgsql-es-ayuda] pequeña ayuda con triggers y functions

Asi es Jaime el problema es asi.


a ver si puedo explicarme mejor

tabla1
id
campo 1
campo 2
campo 3

por pagina php se actualizan campo 1 y 2 , porque lo que quiero que el campo 3 se actualize con un nuevo valor

CREATE TRIGGER change_sincro_ser BEFORE UPDATE
ON tabla1
FOR EACH ROW
EXECUTE PROCEDURE cambia_sincro( ID ) (<-- aca deberia mandarse el id o es automatico eso no lo entiendo)


CREATE OR REPLACE FUNCTION cambia_sicro(id int) RETURNS trigger AS '
BEGIN
  IF tg_op = ''UPDATE'' THEN
     UPDATE tabla1 set campo3 = 1 where id = id  ;
  
  END IF;
 
END
' LANGUAGE plpgsql;


esto es mas menos lo que tengo pero no se si estara bien

Saludos




On Mon, May 19, 2008 at 11:00 PM, Jaime Casanova <systemguards@gmail.com> wrote:
2008/5/19 Aldo Quezada <huincha@gmail.com>:
> OK
>
> a ver..
>
> tengo una tabla a la cual se le hacen actualizaciones por php.. el codigo
> del php es un asco por desorden del codigo.
>  por lo cual preferi buscar una solucion por haciendo un trigger y una
> funcion, que cada vez que se actualizara esta tabla, lanzara el trigger para
> actualizar un campo de esta misma tabla, pero caigo en la redundancia
> ciclica.
>

Corrigeme si me equivoco, tu problema es asi:

UPDATE tabla1
-> se ejecuta TRIGGER
   -> dentro del trigger ejecutas otro UPDATE tabla1
       -> Se ejecuta nuevamente el TRIGGER y vuelves al paso anterior

Eso es porque dentro del TRIGGER no debes (ni necesitas) hacer un
UPDATE a la misma tabla al mismo registro... dentro del TRIGGER tienes
disponible el record NEW que hace referencia al registro que se esta
actualizando. Todo lo que debes hacer es definir el TRIGGER como
BEFORE UPDATE y actualizar el campo en el registro NEW (NEW.campo) en
lugar de hacer un UPDATE


--
Atentamente,
Jaime Casanova
Soporte y capacitación de PostgreSQL
Guayaquil - Ecuador
Cel. (593) 087171157



--
アルド ファビアン ケサダ ベアス
あるど ふぁびあん けさだ べあす

Al sentir una gran tristeza te das cuenta que la alegría es el mejor remedio para seguir adelante.

¿En qué se parece un cigarro,una cerveza, medicamentos y Michale Jackson?
Todo eso hay que mantenerlo fuera del alcance de los niños.

No comments: