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 19/03/2007, 18h28   #1
Invité de passage
 
Inscription : juillet 2006
Messages : 8
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 8
Points : 2
Points : 2
Par défaut cursor en pl/sql

voila le problème:
- un package en pl/sql contenant des fonctions et des procédures
- une procédure contenant 3 paramètres d'entrées en IN et 1 paramètre d'entrée en OUT
- le paramètre OUT est un cursor

La question est la suivante:
Sur l'éditeur SQL, comment tester la procédure? Comment s'effectue l'appel de la procédure avec le cursor en parametre?

Voila ce que j'ai testé et qui ne compile pas:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
declare
type toto IS record(var1, var2, ...varN);
type tab IS TABLE of toto INDEX BY binary_integer;
 
begin	
nom_package.nom_procedure(variable1, variable2, tab);
FOR i IN tab.first..tab.last loop
dbms_output.put_line 
	(
            to_char(tab.var1||
	           tab.var2||
	           tab.var3
	);
end loop;
end;
Merci d'avance
jlsmith est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2007, 19h21   #2
Expert Confirmé
 
Inscription : février 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3 433
Points : 3 462
Points : 3 462
Votre code travaille un tableau et non sur un curseur.

Pour la déclaration d'un curseur avec SQL*Plus et son utilisation dans un bloc PL/SQL voir par exemple: http://www.developpez.net/forums/sho...p?t=128988&#10
__________________
P. Forstmann

AskTom Forums OTN doc 8, 9, 10 et 11
pifor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/03/2007, 10h40   #3
Invité de passage
 
Inscription : juillet 2006
Messages : 8
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 8
Points : 2
Points : 2
Par défaut merci bien

c'est bon, gràce à votre aide et des recherches, c'est résolu. Pour info, voici la procédure à suivre:

Citation:
declare

t_cursor nom_table.T_CURSOR;

t_rec nom_table%ROWTYPE ; -- (table où est déclarer votre curseur en paramètre de sortie)


begin

nom_table.nom_procedure( var1,
var2,
var3,
t_cursor
);

dbms_output.put_line(t_cur%rowcount);
-- c'est juste pour info et savoir le nombre de ligne qui est retourné

loop
fetch t_cursor into t_rec;
exit when t_cursor%NOTFOUND;

dbms_output.put_line (
t_rec
);
-- t_rec peut etre remplacé par un record et donc contenir plusieurs champs d'une ou plusieurs table. C'est selon les besoins de chacun.

end loop;
close t_cur;
end;
En espèrant que ceci peut vous aider.

Byebye
jlsmith est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/03/2007, 10h47   #4
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : Conseil

Informations forums :
Inscription : janvier 2004
Messages : 2 866
Points : 3 448
Points : 3 448
Merci de nous avoir fait partager la solution que tu as trouvée.

Si tu as rencontré le problème, il est à peu près certain que quelqu'un d'autre le rencontrera, et sera content de tomber sur ta solution
__________________
Un problème sans solution est un problème mal posé

Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h48.


 
 
 
 
Partenaires

Hébergement Web