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 21/02/2011, 17h19   #1
Invité régulier
 
Inscription : février 2011
Messages : 38
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 38
Points : 9
Points : 9
Par défaut Explication de texte curseur/procédures

Bonjour,

Je suis débutant, j'ai du mal à comprendre ce que fait la procédure suivante :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//Ici ON génére ou remplace la procédure "etl_VEN".
 
CREATE OR REPLACE PROCEDURE etl_VEN
IS
//Ici ON définit le curseur et son tri ?=> Qu'implique l'ordre dans lequel ON écrit les champ ?
CURSOR CUR__VEN IS SELECT CODESOCIETE, CODE_CIAL, CODE_DESCR FROM LST_CIAL;
 
//Ici ON définit des VARIABLES de type texte avec des longueurs spécifiques
  CC varchar(10);
  SC varchar(8);
  CD varchar(30);
 
BEGIN
//Ici ON indique que l'on va passer par chaque ligne de la table dans l'ordre du curseur
FOR enr__VEN IN CUR__VEN
LOOP
 
//Ici ON stocke la valeur des champs dans les VARIABLES
  CC := enr__VEN.CODESOCIETE;
  SC := enr__VEN.CODE_CIAL;
  CD := enr__VEN.CODE_DESCR;
 
//Ici ON met à jour la TABLE _VEN avec le résultat du curseur.
INSERT INTO _VEN (champ1,champ2,champ3) VALUES (SC,CC,CD);
 
END LOOP;
 
END;
mes commentaires sont ils justes, quel est l'intéret de passer par cette procédure plutot que par un CREATE AS sachant que ma BDD ou par un export/import sachant qu'hormis une contrainte primaire sur la table source il n'y a rien de différent.
Les procédures sont elles plus fiables ?
Jenesépa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 17h29   #2
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
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 : 3 311
Points : 5 808
Points : 5 808
Ce n'est pas "create as ..." mais plutôt
Code :
1
2
3
4
 
INSERT INTO _VEN
SELECT CODESOCIETE, CODE_CIAL, CODE_DESCR 
 FROM LST_CIAL;
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 17h44   #3
Invité régulier
 
Inscription : février 2011
Messages : 38
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 38
Points : 9
Points : 9
Merci pour cette précision. SI j'ajoute l'élément suivant avant l'insert

Code :
1
2
3
4
SELECT CODE_CIAL INTO SC
  FROM LST_CIAL
 WHERE CODESOCIETE = CC
   AND CODE_DESCR = CD;
Cela signifie t'il que si mon select récupère plusieurs enregistrements, je les stockent tous dans SC et les ajoute ensuite un par un avec les valeurs de CC et CD courantes ? Au final j'obtiens donc plus de lignes dans ma table de destination est ce ça ?
Jenesépa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 09h02   #4
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
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 : 3 311
Points : 5 808
Points : 5 808
Au départ vous avez correctement analysé votre code : il va lire les informations contenu dans la table LST_CIAL et pour chaque enregistrement trouvé dans cette table il va insérer un enregistrement dans la table _VEN.
C’est un traitement est procédurier (ligne par ligne) et non pas ensembliste (voir mon exemple) mais, il fonctionne.
Si vous ajoutez le code en question ça ne va pas changer grand chose. En fait vous allez relire CODE_SIAL sans que ça serve à quelque chose.
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h01.


 
 
 
 
Partenaires

Hébergement Web