Précédent   Forum du club des développeurs et IT Pro > 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
 
Outils de la discussion
Publicité
'
Vieux 21/11/2012, 13h20   #1
Zisiio
Invité régulier
 
Étudiant
Inscription : novembre 2012
Messages : 9
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2012
Messages : 9
Points : 6
Points : 6
Par défaut Problème de compréhension d'une procédure

Bonjour

Voici une procédure pl/sql qui me pose problème :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
create or replace
PROCEDURE GENERER_OCC_VOL (NBOCC IN NUMBER) AS  
 cpt number;
 cursor liste_vols is
     select volnum from vol;
begin
  for rec_vol in liste_vols loop
    for cpt in 1..nbocc loop
        insert into occurence_vol (occnum, occdate, occetat, volnum)        values (seq_occnum.nextval, sysdate+cpt, 'ouvert à la résa',                rec_vol.volnum);
    end loop;
  end loop;
end;
nb : "seq_occnum" fait référence à une séquence classique d'incrémentation

Pour commencer , je ne comprends pas " le rec_vol ", par déduction j'imagine que REC n'est pas une fonction pl/sql car sa syntaxe aurait été :rec_vol .

Du coup, j'ai cherche du coté des constantes ou autre déclaré, rien ne correspond a ceci dans mon SGBD. Auriez vous une idée ?

Autre truc qui m'intrigue : " for cpt in 1..nbocc " . Pourquoi il y a t-il deux " .. ", que cela signifie-t-il ?

Un grand merci pour avoir pris le temps de lire ce post,
bonne journée
Zisiio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2012, 14h19   #2
mnitu
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 4 114
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 4 114
Points : 8 011
Points : 8 011
Pl/SQL fait beaucoup d’efforts pour minimiser le travail du programmeur et la construction for implicite en fait partie.
Implique que le compilateur derrière la scène :
  • Va déclarer un record rec de type cursor%rowtype
  • Va ouvrir ce curseur
  • Va faire le fetch par lot en utilisant un tableau de 100 enregistrements
  • Va tester qu’il y a des enregistrements encore à traiter et selon le cas va sortir de la boucle
  • Va fermer le curseur
mnitu est actuellement connecté   Envoyer un message privé Réponse avec citation 20
Vieux 21/11/2012, 14h29   #3
Bibeleuh
Membre éclairé
 
Avatar de Bibeleuh
 
Homme Richard
Développeur PL/SQL
Inscription : septembre 2010
Messages : 132
Détails du profil
Informations personnelles :
Nom : Homme Richard
Localisation : France

Informations professionnelles :
Activité : Développeur PL/SQL
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2010
Messages : 132
Points : 348
Points : 348
Salut,

Déjà pour commencer tu peux regarder les différentes syntaxes des boucles en PL/SQL : http://sheikyerbouti.developpez.com/...=Chap1#L1.2.14

Les ".." font simplement partie de la syntaxe, ce qui veut dire que tu boucles de ta borne début jusqu'à ta borne fin comme indiqué dans le tutoriel.

Ensuite tu comprendras que rec_vol est une variable de type RECORD (c'est une ligne retournée par ton curseur, et tu peux accéder à tous les champs sélectionnées dans le curseur par exemple rec_vol.volnum dans ce cas)
Bibeleuh est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 27/11/2012, 12h25   #4
Zisiio
Invité régulier
 
Étudiant
Inscription : novembre 2012
Messages : 9
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2012
Messages : 9
Points : 6
Points : 6
Merci , je vais regarder ceci dés ce soir.
Zisiio est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 11h26.


 
 
 
 
Partenaires

Hébergement Web