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 MySQL Discussion :

[Mysql 5] Question à propos des curseurs


Sujet :

Requêtes MySQL

  1. #1
    Débutant
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2004
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 452
    Points : 324
    Points
    324
    Par défaut [Mysql 5] Question à propos des curseurs
    Bonjour à tous.
    J'aurai aimé savoir si il etait possible d'executer un insert durant l'ouverture d'un curseur.

    voici un exemple :
    create function remplir() returns int (2)
    begin
    declare cur_date cursor for
    select numero,nom from bidule;

    open cur_date;
    fetch cur_date into num,name;
    insert into bidon (aa,bb) values (num,name);
    close cur_date;
    end;

    Voila Merci de votre aide, j'en ai grandement besoin

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Points : 88
    Points
    88
    Par défaut
    Oui il est tout à fait possible d'insérer les valeurs d'un curseur dans un une table quelconque.

    Syntaxe

    Declare cursor curseur for select a from b


    open curseur
    fecth curseur into c

    insert into d values (c);


    Bonne continuation

  3. #3
    Débutant
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2004
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 452
    Points : 324
    Points
    324
    Par défaut
    Je te remercie bebert pour ta reponse rapide j'essaye tout de suite encore Merci

  4. #4
    Débutant
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2004
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 452
    Points : 324
    Points
    324
    Par défaut
    Encore une petite question, est-il possible d'éxecuter des requete de type select delete update ???? Merci encore

    Edit : en faites ce serai surtotu pour le select.

    ex :

    DECLARE CONTINUE handler FOR SQLSTATE '02000' SET l_nothing = 1;


    open cur_nbLog;

    fetch cur_nbLog into log; // récupere le nombre de ligne

    close cur_nbLog;


    open cur_date; // second curseur vérifie si l'enregistremen est deja present
    repeat

    fetch cur_date into codeBadge, pointage, prenom, nom, groupe

    // cette requete permet de vérifier si il existe ou pas
    select count(*) from horodate where noEtudiant = codeBadge and datePointage = pointage

    // si il existe faire un update
    // sinon un insert


    log = log - 1;
    until not log;
    end repeat;

    close cur_date;

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Points : 88
    Points
    88
    Par défaut
    Sans vouloir jouer au clown

    faire un select delete update est impossible !!!

    Plus serieusement, le curseur est comme un espace dans lequel mysql stock les valeurs de ce que tu lui as défini.

    Tu peux donc te servir de la variable (celle qui prend la valeur de ton curseur) comme tu le sais.

    De mémoire je n'ai jamais tester de select variable from curseur ( pas sur que ca fonctionne!!!).
    Par contre update table set champs=LEFT(variable,3) fonctionne par exemple
    ou delete delete champs from table
    where champ = variable;


    J'espère avoir répondu à tes questions bonne continuation

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Points : 88
    Points
    88
    Par défaut
    A la place de ca

    // cette requete permet de vérifier si il existe ou pas
    select count(*) from horodate where noEtudiant = codeBadge and datePointage = pointage

    // si il existe faire un update
    // sinon un insert

    Je pense qu'une doucle boucle if serait plus aproprié

    if noEtudiant=codeBadge
    then if datePointage=pointage
    then update ...
    else insert
    end if
    else insert
    end if

    Et voila le tour est joué

    Par contre donne moi la syntaxe de ton cursor nblog stp ?

  7. #7
    Débutant
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2004
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 452
    Points : 324
    Points
    324
    Par défaut
    Merci bebert pour ta reponse

    En faites j'ai pas tres bien compris desolé.

    Le truc c'est que je récupère plusieurs ligne dans un curseur.
    Ensuite ces lignes doivent etre inseré dans une autre table à condition de ne pas deja l'etre et dans le cas echant faire donc un update.

    En schematisant ca donnerai ca :

    open curs

    fetch curs into cle1, var1, var2

    // a partir de cette 1ere ligne recuperé verifier si l'enregistrement existe deja dans la table.
    select champ from l'autreTable where champ1 = cle1 and champ2 = var2;

    si il existe alors j'executerai un update
    sinon un insert.

    voila j'espere m'etre bien exprimé.

    Encore Merci

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Points : 88
    Points
    88
    Par défaut
    Je crois qu'il y a un décalage dans les postes car la dernière réponse que j'ai posé explique comment faire ton jeu de test

    dabord un curseur qui récupère l'ensemble des valeurs que tu as déjà

    ensuite tu l'ouvres et dans une boucle
    repeat fetch curseur into var a, var b, var c .....

    puis tu ouvres ton jeu de test de la sorte

    if nom = var a // vérification que le nom entré existe ou pas
    then if date = var b // verification de la date
    then update ... // il existe on le modifie
    else insert ... // in n'existe pas on le crée
    end if
    else insert ... // il n'existe pas on le crée
    end if

    et voila tu ferme ta boucle repeat
    tu fermes ton curseur
    et tu ferme ta procédure

  9. #9
    Débutant
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2004
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 452
    Points : 324
    Points
    324
    Par défaut
    Citation Envoyé par beberd
    Je crois qu'il y a un décalage dans les postes car la dernière réponse que j'ai posé explique comment faire ton jeu de test

    dabord un curseur qui récupère l'ensemble des valeurs que tu as déjà

    ensuite tu l'ouvres et dans une boucle
    repeat fetch curseur into var a, var b, var c .....

    puis tu ouvres ton jeu de test de la sorte

    if nom = var a // vérification que le nom entré existe ou pas
    then if date = var b // verification de la date
    then update ... // il existe on le modifie
    else insert ... // in n'existe pas on le crée
    end if
    else insert ... // il n'existe pas on le crée
    end if

    et voila tu ferme ta boucle repeat
    tu fermes ton curseur
    et tu ferme ta procédure

    Merci bebert, je suis d'accord avec toi sur le principe.
    Cependant pour ton exemple ci-dessus, tu me donne :

    if nom = var a // vérification que le nom entré existe ou pas
    then if date = var b // verification de la date

    Dans mon cas var a proviendrai du curseur.
    Quand à nom celui-ci proviendrai d'une requete, et ne serai donc pas une variable propre à la procédure.

    c'est ce qui me bloque en faites.

    En tout cas Encore Merci pour ton aide

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Points : 88
    Points
    88
    Par défaut
    c'est pas un soucis

    nom vient d'une requête externe à la procédure ?

    Dans ton create procedure nom_proc(IN nom ....)

    et voila le tour est joué.

    Sinon si ce nom vient juste d'une auter requête tu peux aussi faire cette requête dans ta procédure de la sorte:

    declare nom varchar (100);
    ...
    ...

    select tata into nom from clients; // par exemple

    Voilà j'espère que c'était bien ca que tu voulais?

  11. #11
    Débutant
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2004
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 452
    Points : 324
    Points
    324
    Par défaut
    Je te remercie bebert j'ai réussi à conpiler ma fonction sans erreur c'est deja bien.

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 120
    Points : 88
    Points
    88
    Par défaut
    Bonne chance alors

    Par contre fais attention le but d'une fonction est de renvoyer un résultat alors qu'une procédure permet elle de modifier des éléments de ta table !!!

    C'est une explication certes sommaire mais qui te permettra je l'espère de trouver ce que tu cherches

  13. #13
    Débutant
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2004
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 452
    Points : 324
    Points
    324
    Par défaut
    Je prend note Merci

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

Discussions similaires

  1. Petite question a propos des itérateurs
    Par Thordax dans le forum C++
    Réponses: 32
    Dernier message: 06/07/2006, 02h45
  2. [Sql Server 2005] Question a propos des champs unicode
    Par siaoly dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 23/06/2006, 16h00
  3. [VBA-E] Question à propos des checkbox
    Par Timfg dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 26/04/2005, 16h09
  4. Question a propos des modulos
    Par barthelv dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 24/03/2005, 16h56

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