allez hop :
CREATE FUNCTION insert_tuple() RETURNS TRIGGER
AS '
DECLARE nb_tuple INTEGER;
DECLARE query VARCHAR(400);
BEGIN
SELECT INTO nb_tuple COUNT(*) FROM table WHERE id1 = new.id1 AND id2 = new.id2;
IF nb_tuple> 0 THEN
query := ''UPDATE table SET val = '' || new.val || '' WHERE id1 = '' || new.id1 || '' AND id2 = '' || new.id2 || '';'';
RAISE NOTICE ''update tuple : %'', query;
EXECUTE query;
RETURN NULL;
END IF;
RAISE NOTICE "tuple inserted";
RETURN new;
END;'
LANGUAGE 'plpgsql';
CREATE TRIGGER trigger_name
BEFORE INSERT ON table
FOR EACH ROW
EXECUTE PROCEDURE insert_tuple();
NB : '' <- c'est pas des doubles quotes, mais deux simples quotes :)
Pas testé,, mais ca devrait rouler.
Désolé pour l'indentation :|
Les triggers sur before peuvent retourner null pour anuler la suite du process (insertion , suppression,...)
les || servent à concatener les chaînes.
Le truc lourd dans plsql, c'est les quotes. PLus d'infos ici : http://www.postgresql.org/docs/view.php?version=7.3&idoc=0&(...)
# Re: PostgreSQL, trigger, insert & update
Posté par LeMagicien Garcimore . En réponse au journal PostgreSQL, trigger, insert & update. Évalué à 6.
CREATE FUNCTION insert_tuple() RETURNS TRIGGER
AS '
DECLARE nb_tuple INTEGER;
DECLARE query VARCHAR(400);
BEGIN
SELECT INTO nb_tuple COUNT(*) FROM table WHERE id1 = new.id1 AND id2 = new.id2;
IF nb_tuple> 0 THEN
query := ''UPDATE table SET val = '' || new.val || '' WHERE id1 = '' || new.id1 || '' AND id2 = '' || new.id2 || '';'';
RAISE NOTICE ''update tuple : %'', query;
EXECUTE query;
RETURN NULL;
END IF;
RAISE NOTICE "tuple inserted";
RETURN new;
END;'
LANGUAGE 'plpgsql';
CREATE TRIGGER trigger_name
BEFORE INSERT ON table
FOR EACH ROW
EXECUTE PROCEDURE insert_tuple();
NB : '' <- c'est pas des doubles quotes, mais deux simples quotes :)
Pas testé,, mais ca devrait rouler.
Désolé pour l'indentation :|
Les triggers sur before peuvent retourner null pour anuler la suite du process (insertion , suppression,...)
les || servent à concatener les chaînes.
Le truc lourd dans plsql, c'est les quotes. PLus d'infos ici : http://www.postgresql.org/docs/view.php?version=7.3&idoc=0&(...)
Pour une doc complète :
http://www.postgresql.org/docs/view.php?version=7.3&idoc=0&(...)
A plus.