• # Re: PostgreSQL, trigger, insert & update

    Posté par . En réponse au journal PostgreSQL, trigger, insert & update. Évalué à 6.

    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&(...)

    Pour une doc complète :
    http://www.postgresql.org/docs/view.php?version=7.3&idoc=0&(...)

    A plus.