PL/SQL
Résolu/Fermé
soleil_levant
Messages postés
393
Date d'inscription
lundi 15 septembre 2008
Statut
Membre
Dernière intervention
14 avril 2011
-
17 mars 2010 à 23:45
soleil_levant Messages postés 393 Date d'inscription lundi 15 septembre 2008 Statut Membre Dernière intervention 14 avril 2011 - 22 mars 2010 à 21:58
soleil_levant Messages postés 393 Date d'inscription lundi 15 septembre 2008 Statut Membre Dernière intervention 14 avril 2011 - 22 mars 2010 à 21:58
A voir également:
- PL/SQL
- Récupération serveur sql - Télécharger - Gestion de données
- Soustraction sql - Forum Programmation
- Sql query - Télécharger - Gestion de données
- Ora-06502: pl/sql : erreur numérique ou erreur sur une valeur: tampon de chaîne de caractères trop petit ✓ - Forum Oracle
- Sql replace plusieurs valeurs - Forum Programmation
4 réponses
Salut
place ton insert APRES ton exit when
de plus, même si c'est un exo sur les curseurs, on ne fait pas un curseur pour une ligne.
donc ton nombre, c'est
declare
nombre : number;
... autres declarations
begin
select count(*) into nombre from emp;
mais si le but est de compter les lignes traitees, ton algo est alors faux et tu dois plutot mettre
declare
nombre : numer := 0;
... autres decl
begin
open theCursor;
loop
fetch ...
exit when theCursor%notfound;
update emp ... etc
nombre := nombre +1; -- je viens de traiter une ligne
end loop;
close theCursor;
dbms_output.put_line(nombre||' lignes traitee(s)');
voilà !
maintenant que t'es sur de bons rails, je ne peux m'empecher de te conseiller la lecture de la doc de l'option FOR UPDATE des curseurs... ca te permettrait un curseur genre select * ... et un update genre update set col=theCursor.col*1.2 where ...
place ton insert APRES ton exit when
de plus, même si c'est un exo sur les curseurs, on ne fait pas un curseur pour une ligne.
donc ton nombre, c'est
declare
nombre : number;
... autres declarations
begin
select count(*) into nombre from emp;
mais si le but est de compter les lignes traitees, ton algo est alors faux et tu dois plutot mettre
declare
nombre : numer := 0;
... autres decl
begin
open theCursor;
loop
fetch ...
exit when theCursor%notfound;
update emp ... etc
nombre := nombre +1; -- je viens de traiter une ligne
end loop;
close theCursor;
dbms_output.put_line(nombre||' lignes traitee(s)');
voilà !
maintenant que t'es sur de bons rails, je ne peux m'empecher de te conseiller la lecture de la doc de l'option FOR UPDATE des curseurs... ca te permettrait un curseur genre select * ... et un update genre update set col=theCursor.col*1.2 where ...
Salut
Bin là, on sort du cours sur les curseurs pour entrer dans celui de la logique, de l'algorithmique.
exit when curseur%NOTFOUND sert à sortir d'une boucle si plus rien n'est à lire dans le curseur. on l'utilise normalement juste après le fetch, on s'évite ainsi d'exécuter des instructions qui nécessitent des données du curseur.
imaginons être à la fin du curseur (la dernière ligne valide a été lue lors du passage précédent)
fetch curseur into var1, var2 etc -- il n'y avait plus rien à lire : var1, var2 etc ne contiennent que du vent
insert into matable values(var1, var2, etc) -- j'insère du vent
exit when curseur%NOTFOUND -- et maintenant on quitte la boucle
... t'as inséré "du vent"
si tu intervertis l'exit avec l'insert, l'exit te permet de sortir AVANT d'insérer du vent !
fetch curseur into var1, var2 etc -- il n'y avait plus rien à lire : var1, var2 etc ne contiennent que du vent
exit when curseur%NOTFOUND -- maintenant on quitte la boucle
insert into matable values(var1, var2, etc) -- et rien n'est inséré !
ça te va ?
Bin là, on sort du cours sur les curseurs pour entrer dans celui de la logique, de l'algorithmique.
exit when curseur%NOTFOUND sert à sortir d'une boucle si plus rien n'est à lire dans le curseur. on l'utilise normalement juste après le fetch, on s'évite ainsi d'exécuter des instructions qui nécessitent des données du curseur.
imaginons être à la fin du curseur (la dernière ligne valide a été lue lors du passage précédent)
fetch curseur into var1, var2 etc -- il n'y avait plus rien à lire : var1, var2 etc ne contiennent que du vent
insert into matable values(var1, var2, etc) -- j'insère du vent
exit when curseur%NOTFOUND -- et maintenant on quitte la boucle
... t'as inséré "du vent"
si tu intervertis l'exit avec l'insert, l'exit te permet de sortir AVANT d'insérer du vent !
fetch curseur into var1, var2 etc -- il n'y avait plus rien à lire : var1, var2 etc ne contiennent que du vent
exit when curseur%NOTFOUND -- maintenant on quitte la boucle
insert into matable values(var1, var2, etc) -- et rien n'est inséré !
ça te va ?
soleil_levant
Messages postés
393
Date d'inscription
lundi 15 septembre 2008
Statut
Membre
Dernière intervention
14 avril 2011
32
20 mars 2010 à 02:41
20 mars 2010 à 02:41
Ok ca roule à merveille !!
Mais une dernière question, pourquoi quand je place l'insertion après la vérification de fin du curseur il y plus de ligne supplémentaire!!
Thanks a lot, après cette dernière question, je pourrais au moins prétendre comprendre les curseurs sous oracle :D
Résolut
Mais une dernière question, pourquoi quand je place l'insertion après la vérification de fin du curseur il y plus de ligne supplémentaire!!
Thanks a lot, après cette dernière question, je pourrais au moins prétendre comprendre les curseurs sous oracle :D
Résolut
BadGuitarist
Messages postés
367
Date d'inscription
dimanche 12 octobre 2008
Statut
Membre
Dernière intervention
20 octobre 2013
27
21 mars 2010 à 02:10
21 mars 2010 à 02:10
Tu as compris cette écriture-ci des curseurs ... il te reste encore quelques autres trucs à apprendre sur les curseurs sauce Oracle ;-)
soleil_levant
Messages postés
393
Date d'inscription
lundi 15 septembre 2008
Statut
Membre
Dernière intervention
14 avril 2011
32
21 mars 2010 à 13:53
21 mars 2010 à 13:53
Salut,
ton pseudo dit tout sur ta personne :D bad vat!! Des commentaires de ce type sont null :)
ton pseudo dit tout sur ta personne :D bad vat!! Des commentaires de ce type sont null :)
BadGuitarist
Messages postés
367
Date d'inscription
dimanche 12 octobre 2008
Statut
Membre
Dernière intervention
20 octobre 2013
27
22 mars 2010 à 02:01
22 mars 2010 à 02:01
Pourquoi m'injuries-tu avec ta psycho à 2 balles ?
Il existe effectivement plusieurs écritures de curseurs : les curseurs implicites, les curseurs explicites, les curseurs paramétrés ...
Mais je te laisse à tes connaissances ... suffisantes certainement.
Il existe effectivement plusieurs écritures de curseurs : les curseurs implicites, les curseurs explicites, les curseurs paramétrés ...
Mais je te laisse à tes connaissances ... suffisantes certainement.
soleil_levant
Messages postés
393
Date d'inscription
lundi 15 septembre 2008
Statut
Membre
Dernière intervention
14 avril 2011
32
22 mars 2010 à 21:58
22 mars 2010 à 21:58
Autant pour moi :D
Je ne t'ai pas injurié, si tu l'as pris mal je m'en excuse!
ton premier commentaire je le trouve infructueux comme ca ! mais le second l'est!
a+
Je ne t'ai pas injurié, si tu l'as pris mal je m'en excuse!
ton premier commentaire je le trouve infructueux comme ca ! mais le second l'est!
a+
soleil_levant
Messages postés
393
Date d'inscription
lundi 15 septembre 2008
Statut
Membre
Dernière intervention
14 avril 2011
32
20 mars 2010 à 12:08
20 mars 2010 à 12:08
Ca me vas à merveille!!
Merci infiniment :)
Merci infiniment :)