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

 PostgreSQL Discussion :

Triggers, tester si NEW ou OLD est assigné


Sujet :

PostgreSQL

  1. #1
    Membre éprouvé
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Points : 1 066
    Points
    1 066
    Par défaut Triggers, tester si NEW ou OLD est assigné
    Salut à toutes et à tous !

    Je débute avec Postgre, et suis en train d'apprendre son système de trigger.
    Un peu opaque à première vue, très différent de Sybase et SQLite, mais j'ai fini par saisir l'idée.

    Seule chose: je voudrais éviter la duplication de code, créant une et une seule fonction pour un trigger qui gère à la fois l'insert, l'update et le delete.
    Dans cette fonction, j'ai besoin de NEW et OLD, afin de rectifier certaines valeurs dans une autre table.

    Mais voila, très vite Postgre me rappelle à l'ordre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ERROR:  record "new" is not assigned yet
    DETAIL:  The tuple structure of a not-yet-assigned record is indeterminate.
    CONTEXT:  PL/pgSQL function "update_accounts" line 2 at IF
    Voici le code en cause (bon, c'est un peu bidon bien sur, puisque je suis tjs en train d'apprendre le système )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE OR REPLACE FUNCTION update_accounts()RETURNS trigger AS $$
    BEGIN
    	IF NEW IS NULL THEN
    		INSERT INTO Account(accountName, balance) VALUES ('Haha', '90.0');
    	END IF;
     
    	RETURN NEW;
    END;
    $$ LANGUAGE plpgsql;
    La question:
    Comment puis-je savoir si NEW et OLD sont assignés ou non ?

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Seule chose: je voudrais éviter la duplication de code, créant une et une seule fonction pour un trigger qui gère à la fois l'insert, l'update et le delete.
    Pour ça ce n'est pas NEW ou OLD qu'il faut regarder, c'est TG_OP, qui indique pour quelle opération le trigger a été appelé.

  3. #3
    Membre éprouvé
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Points : 1 066
    Points
    1 066
    Par défaut
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. new et old dans trigger
    Par frank71 dans le forum PL/SQL
    Réponses: 5
    Dernier message: 04/01/2008, 17h26
  2. [XML]Comment tester que mon fichier XML est comme ceci?
    Par Devil666 dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 02/06/2005, 13h41
  3. [VB.NET] [VS.NET] Tester si le texte saisi est un entier
    Par San Soussy dans le forum Windows Forms
    Réponses: 2
    Dernier message: 19/10/2004, 10h41
  4. Tester si un fichier X est ouvert
    Par James64 dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 06/10/2004, 15h48
  5. Comment tester qu'un objet String est bien initialisé
    Par Jones dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 17/09/2004, 11h29

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