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

PL/SQL Oracle Discussion :

Que fait cette requête ?


Sujet :

PL/SQL Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 38
    Points : 19
    Points
    19
    Par défaut Que fait cette requête ?
    Bonjour,

    je m'excuse tout d'abord pour le type de message posté. Ayant un niveau basique en sql, il y a certaines requêtes que je n'arrive pas à comprendre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    INSERT INTO BONUS (SEQBONUS, IDBONUS, PROMOTIONID,CODECLIENTTYPE, DATEDEB, DATEFIN,TYPEFIC, DOSSIERID)
    select max_id.id + rownum, idbonus,prom.id,CODECLIENTTYPE,
    '01/02/2011','28/02/2011',TYPEFIC, DOSSIERID from
    (select max(to_number(seqbonus)) id from bonus) max_id,
    (select promotionid id from promotion where descr = 'Promotion'  and datedeb= '01/02/2011') prom,
    (select * from bonus where datefin = '28/02/2011' and promotionid = (select promotionid from promotion 
    where descr = 'Promotion & and datefin= '17/01/2011') );
    Ce que j'ai compris pour l'instant:

    On insert dans la table bonus une ligne dont le chanps SEQBONUS s'incrémente , avec même IDBONUS et CODECLIENTTYPE.

    Par la suite on rentre DATEDEB, DATEFIN en leur attribuant chacun une valeur.

    Après c'est mystère et boule de gomme. Quelqu'un aurait-il l'ammabilité de m'xpliquer cette requête en détail, en me précisant les points importants.

    première question pour le promotionID, que signifie prom.id ?
    que signifie select max_id.id ?

    select max(to_number(seqbonus)) id from bonus) max_id ?
    etc...

  2. #2
    Membre expérimenté Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Points : 1 597
    Points
    1 597
    Par défaut
    Ce code SQL est écrit en plusieur parties
    1. Update
    2. Select


    C'est la partie Select qui t'intéresse.

    Dans cette partie, après la clause "FROM" il y a 3 sous requêtes qui sont délimitées par des parenthèses :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Update ...
    Select ....
    From ( sous requête 1 ) alias1,
         ( sous requête 2 ) alias2,
         ( sous requête 3 ) alias3

    L'alias de la première sous requête est max_id et elle remonte la valeur maximale du champs seqbonus ( max(number(seqbonus)) ) pour la table bonus (donc une ligne), cette valeur est max_id.id.

    L'alias de la deuxième sous requête est prom et elle remonte LES valeurS promotion id de la table promotion selon un certain nombre de critères. ces valeurs sont nommées prom.id, donc n lignes (en théorie). On les appellera prom.id suivi d'un numéro et on supposera que les numéros vont de 1 à m.

    La troisième sous requête remonte le contenu de la table bonus selon un certain nombre de critères, plusieur lignes donc en théorie. On les appellera l(b) suivi d'un d'un numéro et on supposera que les numéros vont de 1 à n.

    On obtient au final un paquet de lignes qu'on peut écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    prom.id1 l(b)1 max_id.id numéro_de_ligne
    prom.id1 l(b)2 max_id.id numéro_de_ligne
    [...]
    prom.id1 l(b)n max_id.id numéro_de_ligne
    prom.id2 l(b)1 max_id.id numéro_de_ligne
    prom.id2 l(b)2 max_id.id numéro_de_ligne
    [...]
    prom.idm l(b)n max_id.id numéro_de_ligne
    De ce "paquet" on va tirer les champs pour faire l'insertion.

  3. #3
    Membre régulier
    Inscrit en
    Janvier 2011
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 56
    Points : 77
    Points
    77
    Par défaut
    Bonjour,
    SI vous avez vraiment l'intention d'apprendre SQL de Oracle, je vous conseille d'être autonome et de commencer par lire :

    http://download.oracle.com/docs/cd/B...b10759/toc.htm


  4. #4
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par ojo77 Voir le message
    Ce code SQL est écrit en plusieur parties
    1. Update
    2. Select


    C'est la partie Select qui t'intéresse.

    Dans cette partie, après la clause "FROM" il y a 3 sous requêtes qui sont délimitées par des parenthèses :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Update ...
    Select ....
    From ( sous requête 1 ) alias1,
         ( sous requête 2 ) alias2,
         ( sous requête 3 ) alias3

    L'alias de la première sous requête est max_id et elle remonte la valeur maximale du champs seqbonus ( max(number(seqbonus)) ) pour la table bonus (donc une ligne), cette valeur est max_id.id.

    L'alias de la deuxième sous requête est prom et elle remonte LES valeurS promotion id de la table promotion selon un certain nombre de critères. ces valeurs sont nommées prom.id, donc n lignes (en théorie). On les appellera prom.id suivi d'un numéro et on supposera que les numéros vont de 1 à m.

    La troisième sous requête remonte le contenu de la table bonus selon un certain nombre de critères, plusieur lignes donc en théorie. On les appellera l(b) suivi d'un d'un numéro et on supposera que les numéros vont de 1 à n.

    On obtient au final un paquet de lignes qu'on peut écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    prom.id1 l(b)1 max_id.id numéro_de_ligne
    prom.id1 l(b)2 max_id.id numéro_de_ligne
    [...]
    prom.id1 l(b)n max_id.id numéro_de_ligne
    prom.id2 l(b)1 max_id.id numéro_de_ligne
    prom.id2 l(b)2 max_id.id numéro_de_ligne
    [...]
    prom.idm l(b)n max_id.id numéro_de_ligne
    De ce "paquet" on va tirer les champs pour faire l'insertion.

    Merci pour le retour ojo, je comprend mieux.

    Le lien posté par orawisss me sera d'une grande utilité aussi.

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

Discussions similaires

  1. que fait cette fonction ?
    Par nitteo dans le forum C#
    Réponses: 21
    Dernier message: 31/01/2008, 17h30
  2. Que fait cette fonction ?
    Par masterix59 dans le forum Débuter
    Réponses: 2
    Dernier message: 16/11/2007, 21h13
  3. que fait cette fonction ?
    Par salseropom dans le forum C
    Réponses: 21
    Dernier message: 12/10/2006, 18h33
  4. [Tableaux] Mais que fait cette condition exactement?
    Par pierrot10 dans le forum Langage
    Réponses: 5
    Dernier message: 21/09/2006, 12h36
  5. Que fait cette requête?
    Par noinneh dans le forum Langage SQL
    Réponses: 8
    Dernier message: 12/10/2005, 19h38

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