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 :

Contexte de retour d'un trigger


Sujet :

PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 6
    Par défaut Contexte de retour d'un trigger
    Bonjour,

    Je suis confronté au problème suivant :
    depuis un script PHP je procède à des INSERT dans une table acheteur :

    try {

    $sql = "INSERT INTO acheteur(cod_id,siret,raisonsoc,typo,adresse,comptable,url)"
    ." values(:cod_id,:siret,:raisonsoc,:typo,:adresse,:comptable,:url)";

    $stmt= $dbh->prepare($sql);
    $stmt->BindParam(':cod_id',$tab[1]);
    $stmt->BindParam(':siret',$tab[2]);
    $stmt->BindParam(':raisonsoc',$tab[4]);
    $stmt->BindParam(':typo',$tab[5]);
    $stmt->BindParam(':adresse',$tab[6]);
    $stmt->BindParam(':comptable',$tab[7]);
    $stmt->BindParam(':url',$tab[12]);

    $stmt->execute();
    $stmt->closeCursor();
    ...


    Côté base de données, j'ai créé un trigger afin d'actualiser un champ de la table prereg (suite à l'ajout d'un enregistrement dans la table acheteur) :


    create trigger inactiverPrereg
    after insert on acheteur
    for each row execute procedure inactiverPrereg();

    et la fonction :

    create or replace function inactiverPrereg() returns trigger as '
    declare
    inscrits_cursor cursor for select email from prereg,acheteur where acheteur.siret=prereg.siret and prereg.actif=true;
    email prereg.email%TYPE;
    begin
    open inscrits_cursor;
    loop
    fetch inscrits_cursor into email;
    EXIT WHEN NOT FOUND;
    update prereg set actif=false where prereg.email=email;
    end loop;
    close inscrits_cursor;
    end;
    ' language 'plpgsql';


    Lorsque je lance mes insertions via le client PHP, j'obtiens le résultat suivant :


    SQLSTATE[2F005]: Function executed no return statement: 7 ERROR: control reached end of trigger procedure without RETURN CONTEXT: PL/pgSQL function "inactiverprereg"


    Je précise que les insertions dans la table acheteur fonctionnent quand je supprime le trigger...

    Si quelqu'un est en mesure de m'expliquer ce qui cloche, je le bénis d'avance :-)

    Patrick Charda

  2. #2
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 6
    Par défaut
    create or replace function inactiverPrereg() returns trigger as '
    ...
    ...
    close inscrits_cursor;
    return null;
    end;
    ' language 'plpgsql';


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

Discussions similaires

  1. Trigger et retour de valeur
    Par euler25 dans le forum Requêtes
    Réponses: 7
    Dernier message: 05/02/2013, 15h26
  2. Recupération du retour d'un trigger PostgreSQL
    Par Johngtrs dans le forum Langage
    Réponses: 1
    Dernier message: 14/06/2012, 16h46
  3. Trigger et contexte : un exemple ?
    Par StringBuilder dans le forum Développement
    Réponses: 3
    Dernier message: 15/09/2011, 17h52
  4. trigger pour retour d'informations
    Par FloFlo12 dans le forum Développement
    Réponses: 1
    Dernier message: 15/12/2008, 12h25
  5. Réponses: 8
    Dernier message: 23/09/2006, 17h29

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