IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes PostgreSQL Discussion :

Remplacer dans trigger INSERT par UPDATE si clé existe


Sujet :

Requêtes PostgreSQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Juin 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Juin 2011
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Remplacer dans trigger INSERT par UPDATE si clé existe
    Bonjour.

    Comment remplacer dans un trigger, l'exécution INSERT par UPDATE après avoir contrôlé que le champ contenant la clé, existe déjà dans la table concernée par l’Insert (pour traitement de tables héritées où le contrôle d’unicité de la clé n’est pas possible nativement).

    Merci.

    Mon ébauche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE OR REPLACE FUNCTION f_ctrl_doublons() RETURNS TRIGGER AS $t_ctrl_doublons$
    BEGIN
     IF (TG_OP = 'INSERT') THEN
      IF (SELECT count(*) FROM table WHERE cléinsérée = cléexistante) <> NULL;
           Provoquer ici le remplacement l’Insert par un Update
        END IF;
      END IF;
    END;
     
    CREATE TRIGGER t_ctrl_doublons BEFORE INSERT ONtableFOR EACH ROW ?

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Dans la doc il y a ton bonheur, les dev l'on fait pour toi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    CREATE FUNCTION merge_db(key INT, data TEXT) RETURNS VOID AS
    $$
    BEGIN
        LOOP
            -- first try to update the key
            UPDATE db SET b = data WHERE a = key;
            IF found THEN
                RETURN;
            END IF;
            -- not there, so try to insert the key
            -- if someone else inserts the same key concurrently,
            -- we could get a unique-key failure
            BEGIN
                INSERT INTO db(a,b) VALUES (key, data);
                RETURN;
            EXCEPTION WHEN unique_violation THEN
                -- do nothing, and loop to try the UPDATE again
            END;
        END LOOP;
    END;
    $$
    LANGUAGE plpgsql;

Discussions similaires

  1. parser une URL dans un insert ou update
    Par thor76160 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 15/10/2010, 22h41
  2. Crée un trigger (INSERT/DELETE/UPDATE) paramètré
    Par Sergejack dans le forum Contribuez
    Réponses: 0
    Dernier message: 15/09/2009, 12h05
  3. [sql Flash] Lecture BDD dans Flash , INSERT ou UPDATE
    Par Keroik dans le forum Requêtes
    Réponses: 1
    Dernier message: 06/08/2007, 11h20
  4. [Declencheur] Update dans trigger Insert
    Par gilder89 dans le forum Développement
    Réponses: 2
    Dernier message: 25/05/2007, 10h30
  5. [TRIGGER] INSERT OU UPDATE(maColonne)
    Par elsuket dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 17/05/2007, 10h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo