On 08/17/2011 01:21 PM, Pedro Castro wrote:
Hola a tod@s.
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