Re: trigers y funciones

From: Rodrigo Gonzalez <rjgonzale(at)estrads(dot)com(dot)ar>
To: Pedro Castro <nahum(dot)listas(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: trigers y funciones
Date: 2011-08-17 16:40:03
Message-ID: 4E4BEEE3.7030200@estrads.com.ar
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

On 08/17/2011 01:21 PM, Pedro Castro wrote:
> Hola a tod(at)s(dot)
>
> Una aplicación que no diseñe, actualiza los campos de una tabla solo
> copiandolos de un renglon existente y solo se autoincrementa el id que
> es serial con lo que duplica varios datos que no debe hacer, existe la
> posibilidad de cambiar este comportamiento con un trigger y una función.
>
> esta es la tabla.
>
> id | cve1 | cve2 | cve3 | texto
> 1 2 3 4 pepe
> Hay una operación que hace lo siguiente
> update y luego un insert
> id | cve1 | cve2 | cve3 | texto
> 1 2 3 4 pepito ->update
> 2 2 3 4 pepe -> insert
>
> Esto corre en una transacción, lo que necesito que haga con un
> trigger/funcion y me quede:
> id | cve1 | cve2 | cve3 | texto
> 1 2 3 4 pepito ->update
> 2 2 3 5 pepe -> insert

Con una funcion seria algo asi....(sin probar|)

CREATE FUNCTION upsert_table (p_id INT, p_cve1 INT, p_cve2 INT, ....)
RETURNS VOID AS

BEGIN
UPDATE table SET cve1 = p_cve1, cve2 = p_cve2.... WHERE id = p_id;

IF FOUND THEN
RETURN;
END IF;

-- Insert
INSERT INTO table VALUES (p_id, p_cve1.....);
END;
LANGUAGE 'plpgsql';

Modificala de acuerdo a la table que estes usando y podes simplemente
llamarla.

Con un before trigger no estoy seguro que funcionara....pero probalo,
haces un select con NEW.id y haces un update si esta repetido.....eso
si, despues devolve NULL para que no inserte la nueva fila
|
>
> es posible?
>
> Gracias.
>
Saludos

Rodrigo Gonzalez

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message caerices 2011-08-17 18:24:08 Re: trigers y funciones
Previous Message Pedro Castro 2011-08-17 16:21:33 trigers y funciones