Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/02/2011, 14h36   #1
Invité régulier
 
Inscription : avril 2010
Messages : 38
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 38
Points : 5
Points : 5
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 :
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...
gabi75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2011, 16h58   #2
Membre chevronné
 
Homme O. Joly
Support
Inscription : décembre 2010
Messages : 287
Détails du profil
Informations personnelles :
Nom : Homme O. Joly
Âge : 38
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Support
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2010
Messages : 287
Points : 617
Points : 617
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 :
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 :
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.
ojo77 est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 08/02/2011, 18h15   #3
Membre du Club
 
Wissem
Inscription : janvier 2011
Messages : 56
Détails du profil
Informations personnelles :
Nom : Wissem

Informations forums :
Inscription : janvier 2011
Messages : 56
Points : 66
Points : 66
Envoyer un message via MSN à orawiss Envoyer un message via Skype™ à orawiss
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

__________________
----------------------------------------------------------------------------------------------
Merci,
Wissem
www.oracle-class.com (Vidéos, Articles, Livres, Forum, Webinar ...tous sur Oracle)
www.oracle-tns.com
OCA & OCP Oracle
orawiss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 13h10   #4
Invité régulier
 
Inscription : avril 2010
Messages : 38
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 38
Points : 5
Points : 5
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 :
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 :
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.
gabi75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h57.


 
 
 
 
Partenaires

Hébergement Web