Re: pequeña ayuda con triggers y functions

Lists: pgsql-es-ayuda
From: "Aldo Quezada" <huincha(at)gmail(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: pequeña ayuda con triggers y functions
Date: 2008-05-19 19:40:40
Message-ID: 45ace9db0805191240u65ad116du64540c96331bb5d0@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Hola Lista,

Me presento , me llamo Aldo Quezada, soy de Chile y programo en web hace
años

tengo unas dudas sobre los trigger y como mandarle datos a los
procedimientos almacenados ( o function )

mi idea es que cada vez que se haga una actualizacion en una tabla ( en este
caso 2) , se dispare el trigger(2), este a su vez mande el ID del registro
que se modifico,
para que la funcion actualice otro campo de la tabla (2), pero tengo tb el
problema del loop recursivo, porque actualiza 2 tablas que necesito vigilar
con los trigger y ademas no se como mandarle a las funciones desde el
trigger los id que se modificaron, si alguien me manda una luz sobre esto
se lo agradeceria.

les informo que estoy trabajando en una base que no puedo modificar el
diseño que es un asco

saludos

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

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.


From: Diego Gil <listas(at)adminsa(dot)com>
To: Aldo Quezada <huincha(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: pequeña ayuda con triggers y functions
Date: 2008-05-19 20:25:21
Message-ID: 1211228721.3128.17.camel@roadwarrior.maipucinos.com.ar
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

El lun, 19-05-2008 a las 15:40 -0400, Aldo Quezada escribió:
> Hola Lista,
>
> Me presento , me llamo Aldo Quezada, soy de Chile y programo en web
> hace años
>
> tengo unas dudas sobre los trigger y como mandarle datos a los
> procedimientos almacenados ( o function )
>
> mi idea es que cada vez que se haga una actualizacion en una tabla
> ( en este caso 2) , se dispare el trigger(2), este a su vez mande el
> ID del registro que se modifico,
> para que la funcion actualice otro campo de la tabla (2), pero tengo
> tb el problema del loop recursivo, porque actualiza 2 tablas que
> necesito vigilar
> con los trigger y ademas no se como mandarle a las funciones desde el
> trigger los id que se modificaron, si alguien me manda una luz sobre
> esto
> se lo agradeceria.
>
> les informo que estoy trabajando en una base que no puedo modificar el
> diseño que es un asco
>
> saludos
>

No esta muy claro lo que necesitas hacer (para mi al menos) pero debes
tener en cuenta lo siguiente:

. Al definir un trigger se debe especificar ante que evento se dispara:
INSERT o UPDATE por ejemplo y cuando, BEFORE o AFTER. La función trigger
se aplica a cada una de las filas modificadas sin necesidad de enviarle
ningún ID. O sea que si el trigger se ha especificado "BEFORE UPDATE" y
"FOR EACH ROW" y se modifican 3 filas, la función se aplicara a cada una
de las tres filas modificadas y tendrá disponible los datos de la fila
original, OLD, y la modificada (NEW). Se debe terminar la funcion con
RETURN NEW para que los cambios se efectuen.

Alli haces lo que necesites con cualquiera de los campos de la fila.
Solo bastaría que hagas NEW.campo = XXX para modificar los datos del
campo.

Lo que no tengo en claro es cual es la relación entre ambas tablas.

Saludos,
Diego.

>
>
>
>
> --
> アルド ファビアン ケサダ ベアス
> あるど ふぁびあん けさだ べあす
>
> 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.


From: "Alejandro D(dot) Burne" <alejandro(dot)dburne(at)gmail(dot)com>
To: "Aldo Quezada" <huincha(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: pequeña ayuda con triggers y functions
Date: 2008-05-20 00:25:34
Message-ID: 8398dc6d0805191725h1d3c419dvf9f3f748dbefe026@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

El día 19 de mayo de 2008 16:40, Aldo Quezada <huincha(at)gmail(dot)com> escribió:
> Hola Lista,
>
> Me presento , me llamo Aldo Quezada, soy de Chile y programo en web hace
> años
>
> tengo unas dudas sobre los trigger y como mandarle datos a los
> procedimientos almacenados ( o function )
>
> mi idea es que cada vez que se haga una actualizacion en una tabla ( en este
> caso 2) , se dispare el trigger(2), este a su vez mande el ID del registro
> que se modifico,
> para que la funcion actualice otro campo de la tabla (2), pero tengo tb el
> problema del loop recursivo, porque actualiza 2 tablas que necesito vigilar
> con los trigger y ademas no se como mandarle a las funciones desde el
> trigger los id que se modificaron, si alguien me manda una luz sobre esto
> se lo agradeceria.
>
> les informo que estoy trabajando en una base que no puedo modificar el
> diseño que es un asco
>
> saludos
>

Me parece que la luz nos las vas a tener que dar a nosotros, intenté
seguir el hilo de la idea pero no la entiendo.

Saludos, Alejandro


From: "Aldo Quezada" <huincha(at)gmail(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: pequeña ayuda con triggers y functions
Date: 2008-05-20 00:56:58
Message-ID: 45ace9db0805191756v2f52502ia0de068830f7442@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

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.

On Mon, May 19, 2008 at 8:25 PM, Alejandro D. Burne <
alejandro(dot)dburne(at)gmail(dot)com> wrote:

> El día 19 de mayo de 2008 16:40, Aldo Quezada <huincha(at)gmail(dot)com>
> escribió:
> > Hola Lista,
> >
> > Me presento , me llamo Aldo Quezada, soy de Chile y programo en web hace
> > años
> >
> > tengo unas dudas sobre los trigger y como mandarle datos a los
> > procedimientos almacenados ( o function )
> >
> > mi idea es que cada vez que se haga una actualizacion en una tabla ( en
> este
> > caso 2) , se dispare el trigger(2), este a su vez mande el ID del
> registro
> > que se modifico,
> > para que la funcion actualice otro campo de la tabla (2), pero tengo tb
> el
> > problema del loop recursivo, porque actualiza 2 tablas que necesito
> vigilar
> > con los trigger y ademas no se como mandarle a las funciones desde el
> > trigger los id que se modificaron, si alguien me manda una luz sobre esto
> > se lo agradeceria.
> >
> > les informo que estoy trabajando en una base que no puedo modificar el
> > diseño que es un asco
> >
> > saludos
> >
>
> Me parece que la luz nos las vas a tener que dar a nosotros, intenté
> seguir el hilo de la idea pero no la entiendo.
>
> Saludos, Alejandro
>

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

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.


From: Diego Gil <listas(at)adminsa(dot)com>
To: Aldo Quezada <huincha(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: pequeña ayuda con triggers y functions
Date: 2008-05-20 01:50:19
Message-ID: 1211248219.3391.5.camel@roadwarrior.maipucinos.com.ar
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

El lun, 19-05-2008 a las 20:56 -0400, Aldo Quezada escribió:
> 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.

No, hasta donde yo entiendo. Proba el siguiente ejemplo. Crea nuevos
registros asignando valores integer al campo atributo1. Luego modifica
esos valores y fijate como queda el campo atributo2 despues de cada
modificación.

Saludos,
Diego.

--
-- PostgreSQL database dump
--

-- Started on 2008-05-19 22:44:20 ART

SET client_encoding = 'UTF8';
SET standard_conforming_strings = off;
SET check_function_bodies = false;
SET client_min_messages = warning;
SET escape_string_warning = off;

--
-- TOC entry 1609 (class 1262 OID 91132)
-- Name: test; Type: DATABASE; Schema: -; Owner: -
--

CREATE DATABASE test WITH TEMPLATE = template0 ENCODING = 'UTF8';

\connect test

SET client_encoding = 'UTF8';
SET standard_conforming_strings = off;
SET check_function_bodies = false;
SET client_min_messages = warning;
SET escape_string_warning = off;

--
-- TOC entry 1610 (class 0 OID 0)
-- Dependencies: 4
-- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: -
--

COMMENT ON SCHEMA public IS 'Standard public schema';

--
-- TOC entry 265 (class 2612 OID 137345)
-- Name: plpgsql; Type: PROCEDURAL LANGUAGE; Schema: -; Owner: -
--

CREATE PROCEDURAL LANGUAGE plpgsql;

SET search_path = public, pg_catalog;

--
-- TOC entry 19 (class 1255 OID 137346)
-- Dependencies: 265 4
-- Name: antes_de_update(); Type: FUNCTION; Schema: public; Owner: -
--

CREATE FUNCTION antes_de_update() RETURNS "trigger"
AS $$DECLARE

BEGIN

NEW.atributo2 = COALESCE(OLD.atributo2 || ' otra vez ... ', 'primera
vez ... ');

RETURN NEW;
END

$$
LANGUAGE plpgsql;

SET default_tablespace = '';

SET default_with_oids = false;

--
-- TOC entry 1271 (class 1259 OID 137335)
-- Dependencies: 4
-- Name: tabla_ejemplo; Type: TABLE; Schema: public; Owner: -;
Tablespace:
--

CREATE TABLE tabla_ejemplo (
clave integer NOT NULL,
atributo1 integer,
atributo2 text
);

--
-- TOC entry 1270 (class 1259 OID 137333)
-- Dependencies: 1271 4
-- Name: tabla_ejemplo_clave_seq; Type: SEQUENCE; Schema: public; Owner:
-
--

CREATE SEQUENCE tabla_ejemplo_clave_seq
INCREMENT BY 1
NO MAXVALUE
NO MINVALUE
CACHE 1;

--
-- TOC entry 1612 (class 0 OID 0)
-- Dependencies: 1270
-- Name: tabla_ejemplo_clave_seq; Type: SEQUENCE OWNED BY; Schema:
public; Owner: -
--

ALTER SEQUENCE tabla_ejemplo_clave_seq OWNED BY tabla_ejemplo.clave;

--
-- TOC entry 1613 (class 0 OID 0)
-- Dependencies: 1270
-- Name: tabla_ejemplo_clave_seq; Type: SEQUENCE SET; Schema: public;
Owner: -
--

SELECT pg_catalog.setval('tabla_ejemplo_clave_seq', 2, true);

--
-- TOC entry 1602 (class 2604 OID 137337)
-- Dependencies: 1271 1270 1271
-- Name: clave; Type: DEFAULT; Schema: public; Owner: -
--

ALTER TABLE tabla_ejemplo ALTER COLUMN clave SET DEFAULT
nextval('tabla_ejemplo_clave_seq'::regclass);

--
-- TOC entry 1604 (class 2606 OID 137342)
-- Dependencies: 1271 1271
-- Name: tabla_ejemplo_pkey; Type: CONSTRAINT; Schema: public; Owner: -;
Tablespace:
--

ALTER TABLE ONLY tabla_ejemplo
ADD CONSTRAINT tabla_ejemplo_pkey PRIMARY KEY (clave);

--
-- TOC entry 1605 (class 2620 OID 137347)
-- Dependencies: 19 1271
-- Name: disparador_antes_de_update; Type: TRIGGER; Schema: public;
Owner: -
--

CREATE TRIGGER disparador_antes_de_update
BEFORE UPDATE ON tabla_ejemplo
FOR EACH ROW
EXECUTE PROCEDURE antes_de_update();

--
-- TOC entry 1611 (class 0 OID 0)
-- Dependencies: 4
-- Name: public; Type: ACL; Schema: -; Owner: -
--

REVOKE ALL ON SCHEMA public FROM PUBLIC;
REVOKE ALL ON SCHEMA public FROM postgres;
GRANT ALL ON SCHEMA public TO postgres;
GRANT ALL ON SCHEMA public TO PUBLIC;

-- Completed on 2008-05-19 22:44:20 ART

--
-- PostgreSQL database dump complete
--


From: "Fernando Moreno" <azazel(dot)7(at)gmail(dot)com>
To: "Aldo Quezada" <huincha(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: pequeña ayuda con triggers y functions
Date: 2008-05-20 02:09:46
Message-ID: b1c45530805191909l1b3e8314h424e06a170b067f7@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

¿Y cuál debe ser el límite de esa recursividad?

Quiero decir, si controlaras esos datos manualmente, en papel, y tú actuaras
como el trigger, modificando datos en la tabla en base a actualizaciones,
¿en qué momento deberías dejar de actualizar?

Te sugiero que pongas el ejemplo más concretamente, aunque sea con tablas y
campos ficticios pero que representen la realidad del diseño sobre el que
trabajas, que de otra forma aquí no nos enteramos.

El día 19 de mayo de 2008 19:56, Aldo Quezada <huincha(at)gmail(dot)com> escribió:

> 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.
>
>
>
> On Mon, May 19, 2008 at 8:25 PM, Alejandro D. Burne <
> alejandro(dot)dburne(at)gmail(dot)com> wrote:
>
>> El día 19 de mayo de 2008 16:40, Aldo Quezada <huincha(at)gmail(dot)com>
>> escribió:
>> > Hola Lista,
>> >
>> > Me presento , me llamo Aldo Quezada, soy de Chile y programo en web hace
>> > años
>> >
>> > tengo unas dudas sobre los trigger y como mandarle datos a los
>> > procedimientos almacenados ( o function )
>> >
>> > mi idea es que cada vez que se haga una actualizacion en una tabla ( en
>> este
>> > caso 2) , se dispare el trigger(2), este a su vez mande el ID del
>> registro
>> > que se modifico,
>> > para que la funcion actualice otro campo de la tabla (2), pero tengo tb
>> el
>> > problema del loop recursivo, porque actualiza 2 tablas que necesito
>> vigilar
>> > con los trigger y ademas no se como mandarle a las funciones desde el
>> > trigger los id que se modificaron, si alguien me manda una luz sobre
>> esto
>> > se lo agradeceria.
>> >
>> > les informo que estoy trabajando en una base que no puedo modificar el
>> > diseño que es un asco
>> >
>> > saludos
>> >
>>
>> Me parece que la luz nos las vas a tener que dar a nosotros, intenté
>> seguir el hilo de la idea pero no la entiendo.
>>
>> Saludos, Alejandro
>>
>
>
>
> --
> アルド ファビアン ケサダ ベアス
> あるど ふぁびあん けさだ べあす
>
> 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.
>


From: Calabaza <calalinux(at)gmail(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Re: pequeña ayuda con triggers y functions
Date: 2008-05-20 02:24:20
Message-ID: 958993320805191924o65b05a83meb6037e293f4ea60@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

El 19/05/08, Fernando Moreno <azazel(dot)7(at)gmail(dot)com> escribió:
> ¿Y cuál debe ser el límite de esa recursividad?
>
> Quiero decir, si controlaras esos datos manualmente, en papel, y tú actuaras
> como el trigger, modificando datos en la tabla en base a actualizaciones,
> ¿en qué momento deberías dejar de actualizar?
>
> Te sugiero que pongas el ejemplo más concretamente, aunque sea con tablas y
> campos ficticios pero que representen la realidad del diseño sobre el que
> trabajas, que de otra forma aquí no nos enteramos.

Opino lo mismo,

código concreto por favor,

Yo imagino que estan tratando de hacer una suerte de auditoria a los
cambios realizados por el codigo php, pero lo vuelves a guardar en la
misma tabla, Si estoy en lo cierto, trata de poner alguna condicion
para salir del loop dentro del triguer, como verificar si la fecha y
hora de actualizacion (que imagino que guardas) es igual a la fecha de
hoy o ponle algun tipo de bandera, (aunque recuerdo que dices que no
puedes cambiar el diseño de la bd) pero bueno, ahi ya tienes algo.

Un Abrazo.
--
§~^Calabaza^~§ from Villa Elisa, Paraguay


From: "Jaime Casanova" <systemguards(at)gmail(dot)com>
To: "Aldo Quezada" <huincha(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: pequeña ayuda con triggers y functions
Date: 2008-05-20 03:00:39
Message-ID: c2d9e70e0805192000i67dedf95ra272600bdec799c5@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

2008/5/19 Aldo Quezada <huincha(at)gmail(dot)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


From: "Aldo Quezada" <huincha(at)gmail(dot)com>
To: "Jaime Casanova" <systemguards(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: pequeña ayuda con triggers y functions
Date: 2008-05-20 15:04:18
Message-ID: 45ace9db0805200804r6c544e12qd0fa4d53f8fe676d@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

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(at)gmail(dot)com>
wrote:

> 2008/5/19 Aldo Quezada <huincha(at)gmail(dot)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.


From: "Jaime Casanova" <systemguards(at)gmail(dot)com>
To: "Aldo Quezada" <huincha(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: pequeña ayuda con triggers y functions
Date: 2008-05-20 15:22:31
Message-ID: c2d9e70e0805200822w31fe37te1124992bf88e1f8@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

2008/5/20 Aldo Quezada <huincha(at)gmail(dot)com>:
>
> 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)
>

nop, esto quedaria asi:
CREATE TRIGGER change_sincro_ser BEFORE UPDATE
ON tabla1
FOR EACH ROW EXECUTE PROCEDURE cambia_sincro();

>
> 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;
>
>

y la función seria asi:

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

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


From: "Fernando Moreno" <azazel(dot)7(at)gmail(dot)com>
To: "Aldo Quezada" <huincha(at)gmail(dot)com>
Cc: "Jaime Casanova" <systemguards(at)gmail(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: pequeña ayuda con triggers y functions
Date: 2008-05-20 15:24:27
Message-ID: b1c45530805200824g51c50999x47b5cccb6074412d@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

¿campo3 siempre será 1?

Independientemente de lo anterior, tu uso de los triggers es incorrecto,
pues si se trata de modificar el registro a actualizar, no hay ninguna
necesidad de ejecutar un UPDATE, sino que te basta con modificar la variable
record NEW.

El día 20 de mayo de 2008 10:04, Aldo Quezada <huincha(at)gmail(dot)com> escribió:

> 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(at)gmail(dot)com>
> wrote:
>
>> 2008/5/19 Aldo Quezada <huincha(at)gmail(dot)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.
>


From: "Aldo Quezada" <huincha(at)gmail(dot)com>
To: "Fernando Moreno" <azazel(dot)7(at)gmail(dot)com>
Cc: "Jaime Casanova" <systemguards(at)gmail(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: pequeña ayuda con triggers y functions
Date: 2008-05-20 15:45:26
Message-ID: 45ace9db0805200845v699b98bbw8392c82586270935@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Gracias Jaime , me funciono super bien

Grax , Saludos

2008/5/20 Fernando Moreno <azazel(dot)7(at)gmail(dot)com>:

> ¿campo3 siempre será 1?
>
> Independientemente de lo anterior, tu uso de los triggers es incorrecto,
> pues si se trata de modificar el registro a actualizar, no hay ninguna
> necesidad de ejecutar un UPDATE, sino que te basta con modificar la variable
> record NEW.
>
> El día 20 de mayo de 2008 10:04, Aldo Quezada <huincha(at)gmail(dot)com>
> escribió:
>
> 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(at)gmail(dot)com>
>> wrote:
>>
>>> 2008/5/19 Aldo Quezada <huincha(at)gmail(dot)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.
>>
>
>

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

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.