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

utilisation du resultat d'une requete dans un curseur


Sujet :

SQL Oracle

  1. #1
    Membre régulier Avatar de pseudobidon57
    Inscrit en
    Octobre 2006
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 133
    Points : 101
    Points
    101
    Par défaut utilisation du resultat d'une requete dans un curseur
    bonjour, je souhaiterais reprendre le resultat d'une requete dans un curseur.
    par exemple, reprendre le maximum des ID d'une table pour l'utiliser en pl/sql comme ci dessous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select max(customer_id) from customer;
    je voudrai utiliser le resultat de cette requete dans un curseur, mais je ne sais pas comment faire..
    Desole pour l'orthographe, mais il n'y a pas d'accent sur les claviers anglais..sniff...

  2. #2
    fab
    fab est déconnecté
    Membre du Club
    Inscrit en
    Juillet 2003
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 44
    Points : 49
    Points
    49
    Par défaut
    Salut,

    Si je dit pas de betise un curseur c'est un jeu de données, or max ca te renvoit une seule valeur.

    en pl/sql avec une variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    I INTEGER;
    SELECT max(customer_id) INTO I FROM customer;
    ou avec un curseur mais qui ne va boucler qu'une seule fois (?)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    I INTEGER;
    For MonCurseur IN (
    SELECT max(customer_id) MaximumID FROM customer)
    loop
    I := Moncurseur.MaximumID
    end loop;
    Ca répond à ta question ?

  3. #3
    Membre régulier Avatar de pseudobidon57
    Inscrit en
    Octobre 2006
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 133
    Points : 101
    Points
    101
    Par défaut
    non, pas trop, mais je crois que mon enonce n'est pas tres precis.
    (veuillez m'excuser pour les accents, je travaille a londres, et tout le monde sait qu'il n'y a pas d'accent dans la langue de shakespeare, donc pas sur les claviers non plus)
    j'ai deja un curseur qui fonctionne, qui se deplace sur plusieurs valeurs, et je souhaite y modifier les donnee d'une table en fonction de la valeur retournee par la requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select max(customer) from customer;
    mais je ne sais pas comment recuperer le resultat de cette requete dans une variable pour l'utiliser ensuite dans un curseur..
    Desole pour l'orthographe, mais il n'y a pas d'accent sur les claviers anglais..sniff...

  4. #4
    fab
    fab est déconnecté
    Membre du Club
    Inscrit en
    Juillet 2003
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 44
    Points : 49
    Points
    49
    Par défaut
    Il faut faire quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    MyCustomer char(32)
    FOR MonCurseur IN (
    SELECT max(customer) Mycustomer FROM customer)
    loop
    if MonCurseur.Mycustomer > x
    then 
    UPDATE Matable set Monchamp = ;
     
    end loop;

  5. #5
    fab
    fab est déconnecté
    Membre du Club
    Inscrit en
    Juillet 2003
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 44
    Points : 49
    Points
    49
    Par défaut
    Oups! j'ai appuyé sur Tab + espace

    Il faut faire quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Mavariable char(32);
    FOR MonCurseur IN (
      SELECT max(customer) Mycustomer FROM customer)
    loop
      if MonCurseur.Mycustomer > x
      then 
        Mavariable := MonCurseur.Mycustomer ;
        UPDATE Matable set Monchamp = Mavariable WHERE ... ;
      endif;
    end loop;
    Si c'est pas ça, alors je crois qu'on se comprend pas...

  6. #6
    Membre régulier Avatar de pseudobidon57
    Inscrit en
    Octobre 2006
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 133
    Points : 101
    Points
    101
    Par défaut
    merci beaucoup fab, cette solution marche, mais ce n'est pas exactement ce que je souhaite faire.. je n'arrive pas expliquer clairement mon probleme, bien que je puisse utiliser cette solution.

    En fait je voudrais savoir s'il serait possible de stocker dans une variable le resultat de la requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select max(customer_id) from customer;
    afin de l'utiliser plus tard dans un bloc pl/sql ( en l'occurence dans mon cas un curseur), mais afin de l'appeler, je ne souhaite pas avoir recours a un curseur... Me comprends tu?? je suis sur que la reponse a mon probleme est tres simple, me je ne m'exprime pas correctement. en tout cas merci pour ton aide, ta solution marche tout de meme.
    Desole pour l'orthographe, mais il n'y a pas d'accent sur les claviers anglais..sniff...

  7. #7
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    bah tu n'as cas déclarer une variable de type number (je suppose que customer_ID est un number) est d'y assigner le résultat avec INTO (dans du PL/SQL bien sûr !)...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT max(customer_id) INTO maVariableNumber FROM customer;
    Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

    Yorglaa

  8. #8
    Membre régulier Avatar de pseudobidon57
    Inscrit en
    Octobre 2006
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 133
    Points : 101
    Points
    101
    Par défaut
    oui je pense que ma solution doit ressembler a ca( j'ai oublier de preciser que je suis debutant en sql). et mon select dois etre dans le begin??
    Desole pour l'orthographe, mais il n'y a pas d'accent sur les claviers anglais..sniff...

  9. #9
    fab
    fab est déconnecté
    Membre du Club
    Inscrit en
    Juillet 2003
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 44
    Points : 49
    Points
    49
    Par défaut
    ben là tu dois tout avoir pour réussir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CREATE OR REPLACE PROCEDURE  NOM_DE_TA_PROCEDURE
    IS
    BEGIN 
     
    maVariableNumber NUMBER(10,2);
     
    SELECT max(customer_id) INTO maVariableNumber FROM customer;
     
    END;
    Après tu réutilises maVariableNumber pour faire des tests, des calculs etc...

  10. #10
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    juste 2 petites corrections, en passant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE OR REPLACE PROCEDURE  NOM_DE_TA_PROCEDURE
    IS
     
    maVariableNumber NUMBER;
     
    BEGIN 
     
    SELECT max(customer_id) INTO maVariableNumber FROM customer;
     
    END;
    1. la variable doit être déclarée AVANT le Begin
    2. il vaut mieux éviter de donner une longueur et une précision au type Number... on ne connait pas les données de notre ami !
    Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

    Yorglaa

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

Discussions similaires

  1. utilisation du resultat d'une requete dans une autre
    Par lewhechris dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 5
    Dernier message: 26/09/2011, 09h05
  2. [MySQL] utiliser le resultat d'une requete dans un WHERE
    Par kakashi05 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 29/07/2011, 00h21
  3. Enregistrer le resultat d'une requete dans un document texte
    Par nmerydem dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/07/2005, 12h32
  4. resultat d'une requete dans une ifrmae aussi??
    Par selifx dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 08/02/2005, 14h20
  5. pb d'utilisation du resultat d'1 requete dans 1 autre
    Par joquetino dans le forum Langage SQL
    Réponses: 7
    Dernier message: 09/03/2004, 15h58

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