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

SQL Procédural MySQL Discussion :

appel de procédure dans le trigger


Sujet :

SQL Procédural MySQL

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Cameroun

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 15
    Par défaut appel de procédure dans le trigger
    merci d'avance pour l'aide;
    j'ai une procédure stockée (envoi_agence) qui prend une donnée en entré (IN) et me retourne 04 autres (OUT)dont voici l'entête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    envoi_agence(IN ca char(10), OUT ccf char(13), OUT ccl char(13), OUT cct char(13), OUT cct char(13));
    comment appelé cette procédure dans un trigger? et utiliser les données retournées dans une commande INSERT INTO.

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 288
    Par défaut
    Dans MySQL, les procédures ne sont pas censées renvoyer un jeu de données... De fait, elles le font quand elles sont appelées directement par l'utilisateur, mais ce résultat n'est pas packagé de manière à être réutilisable. Oui, je sais, c'est idiot, mais c'est comme ça.

    Du coup, il faut repenser ton architecture, et vraisemblablement transformer ta procédure en trigger.

  3. #3
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2011
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 108
    Par défaut
    Pour contourner la limitation qui impose de ne pas retourner de jeu de données dans le trigger, ou dans un PS (procédure stockée) appelée par le trigger, il est possible d'appeler un SELECT via un curseur :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    DECLARE monCurseur CURSOR FOR
        SELECT PS_2(id)
        FROM TABLE;
     
    OPEN monCurseur;
    CLOSE monCurseur;
    Et voilà, pas de jeu de données retourné, fini les
    "ERROR 1415: Not allowed to return a result set from a trigger"
    Edit : Je remonte le topic, mais ce n'est indiqué nul par. Malgré tous les liens trouvés sur Google par rapport à ce problème, aucun topic ne mentionne cette petite astuce.

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2008
    Messages : 119
    Par défaut
    Citation Envoyé par Antoun Voir le message
    Dans MySQL, les procédures ne sont pas censées renvoyer un jeu de données... De fait, elles le font quand elles sont appelées directement par l'utilisateur, mais ce résultat n'est pas packagé de manière à être réutilisable. Oui, je sais, c'est idiot, mais c'est comme ça.

    Du coup, il faut repenser ton architecture, et vraisemblablement transformer ta procédure en trigger.
    Il ne retourne pas de résultat, néanmoins tu remarquera qu'il a mentionné 4 paramètres en Entré/Sortie. Donc oui il peu récupérer quelques valeurs.

    Sinon pour appeler ta procédure stockée :
    Call envoi_agence(param1,param2,param3,param4,param5);

    Puis après te suffit d'utiliser tes variables pour les traiter.

    Rien de bien différent de ce que tu peux voir dans des langages applicatifs.

Discussions similaires

  1. Appeler 2 procédures dans un trigger postgre
    Par rico_bab dans le forum Requêtes
    Réponses: 4
    Dernier message: 29/06/2012, 19h13
  2. [2005] appel d'une procédure dans un trigger
    Par astur2000 dans le forum Développement
    Réponses: 4
    Dernier message: 12/09/2009, 11h18
  3. Comment appeler une procédure dans une autre unité ?
    Par michel71 dans le forum Langage
    Réponses: 1
    Dernier message: 19/09/2007, 16h27
  4. appel de procedure dans un trigger
    Par madimane dans le forum Oracle
    Réponses: 3
    Dernier message: 14/03/2006, 06h59
  5. Appel de procédure dans une page ASP
    Par PrinceMaster77 dans le forum ASP
    Réponses: 5
    Dernier message: 02/04/2004, 16h59

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