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 15/01/2007, 17h04   #1
Nouveau Membre du Club
 
Avatar de magic charly
 
Inscription : février 2006
Messages : 167
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 167
Points : 35
Points : 35
Par défaut PL/SQL : décaler un curseur

Bonjour,


je souhaiterais décaler mon curseur d'un enregistrement sans pour autant utiliser une boucle. Sauriez-vous comment faire ?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
 
DECLARE 
 
CURSOR my_cursor IS
 
  SELECT * FROM ma_table
  WHERE champ2 > 1000
...
 
BEGIN
 
FOR my_record IN my_cursor LOOP
 
IF my_record.champ1=1 
    THEN
         <DECALER LE CURSEUR D UN ENREGISTREMENT>
ENDIF
 
EXECUTE PR_ESSAI(my_record.champ3);
 
END LOOP
merci de votre aide.

Magic

PS: je suis en Oracle 10i
magic charly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2007, 17h08   #2
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 533
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 533
Points : 6 469
Points : 6 469
Délolé mais je ne comprends pas la question ni le besoin. Si la première valeur ne vous convient pas, ignorez-la.
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2007, 17h11   #3
Responsable Business Intelligence
 
Avatar de kalyparker
 
Femme
Consultant en Business Intelligence
Inscription : janvier 2007
Messages : 1 192
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : janvier 2007
Messages : 1 192
Points : 2 564
Points : 2 564
Bonjour,

Dans l'exemple que tu donne la boucle

FOR my_record IN my_cursor LOOP

avance le curseur automatiquement à chaque itération.

Le plus simple je crois c'est de laisser ce curseur tranquille et de mettre une condition inverse qui va executé ta commande que lorsque tu le souhaite :
IF my_record.champ1 != 1
kalyparker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2007, 17h31   #4
Nouveau Membre du Club
 
Avatar de magic charly
 
Inscription : février 2006
Messages : 167
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 167
Points : 35
Points : 35
Merci de votre aide.

Je sais bien que la boucle avance le curseur automatiquemet à chaque itération mais je souhaiterais le faire manuellement. L'exemple que j'ai à traiter est assez complexe. C'est pourquoi j'ai essayé de prendre un cas simple ou peut être un équivalent de next record n'est pas véritablement judicieux.
magic charly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2007, 17h33   #5
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 533
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 533
Points : 6 469
Points : 6 469
Vous pouvez gérer plus "manuellement" votre curseur avec la syntaxe:

Code :
1
2
3
4
5
6
7
8
 
Open ...
Loop
  Fetch ...
  exith when ...
  ...
end loop;
close ...
m'enfin, cela ne fait pas une grosse différence !
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2007, 17h40   #6
Nouveau Membre du Club
 
Avatar de magic charly
 
Inscription : février 2006
Messages : 167
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 167
Points : 35
Points : 35
Code :
1
2
3
4
5
6
7
Open ...
Loop
  Fetch ...
  exit when ...
  ...
end loop;
close ...
Dans votre réponse, si j'ai bien compris il s'agirait de mettre une "boucle dans la boucle" qui permettrait de gérer les cas ou on aurait besoin de passer au record suivant ?
magic charly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2007, 17h43   #7
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 533
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 533
Points : 6 469
Points : 6 469
Désolé, mais je ne comprends toujours pas le besoin.
Vous devez ignorer certains enregistrements ?
Si vous ne pouvez pas tout filtrer directement dans l'ordre Select constitutif du curseur, gérer ce qui vous convient dans un if

Code :
1
2
3
4
5
6
7
 
FOR xx IN zz Loop
   IF condition then
      --on traite
      ...
   End IF ;
End loop ;
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2007, 10h18   #8
Nouveau Membre du Club
 
Avatar de magic charly
 
Inscription : février 2006
Messages : 167
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 167
Points : 35
Points : 35
En repensant le mode de fonctionnement de ma procédure, je suis parvenu à éviter d'utiliser une instruction du type next record.

merci beaucoup de votre aide.

magic charly 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 19h47.


 
 
 
 
Partenaires

Hébergement Web