résolu: problème curseur - SQL/NoSQL - Programmation
Marsh Posté le 28-01-2010 à 13:46:28
elle recommence forcément au début vu que tu fais un close de ton curseur après la fin de la boucle.
Je suis pas sur de bien comprendre ce que tu veux faire mais a mon avis y a moyen de faire autrement et genre pas bancal
Marsh Posté le 28-01-2010 à 13:55:04
En faites je voudrais commencer à récupérer les données à partir de la ligne 3638 jusqu'à la fin c'est à dire 6450. Initialiser le curseur sur cette ligne 3638 au lieu du tout début.
Merci
Marsh Posté le 28-01-2010 à 14:17:27
je ne me suis jamais amusé a ca mais j'imagine que si tu remplaces le close de ton curseur par une nouvelle boucle avec le fetch qui va jusqu'au bout ca devrait.
ou alors tu le réouvres et durant les 3637 eres itérations tu ne fais rien.
les deux sont moches
Code :
|
Marsh Posté le 28-01-2010 à 14:35:26
Merci pour ta réponse mais ça ne fonctionne pas. Il recommence de la première ligne même en ne fermant pas le curseur.
L'idée serait de pouvoir initialiser le pointeur du curseur sur une ligne particulière.
Marsh Posté le 28-01-2010 à 14:56:38
he bien alors tu ouvres ton curseur, tu gardes dans une variable ou tu en es dans ton itération genre p_nbr_iteration:= p_nbr_iteration +1 a chaque fois, et une condition par la suite if (p_nbr_iteration <= 3637) then () else ....
Marsh Posté le 29-01-2010 à 10:12:38
Est-ce tu peux me décrire la syntaxe par rapport à mon code car j'ai essayé et je n'obtiens par le résultat voulu.
Merci
Marsh Posté le 29-01-2010 à 12:18:00
C'est bon j'ai obtenu ce que je voulais.
Merci encore pour la participation.
Marsh Posté le 28-01-2010 à 13:07:37
Bonjour,
Voilà je vous explique mon problème.
je veux récupérer 6540 lignes de données.
j'ai fait un curseur pour cela en utilisant un FOR pour récupérer les 3637 premières lignes dans la variable (étant limité par la taille de la variable à 32767!!).
Le problème c'est que j'aurais voulu récupéré le reste des données c'est à dire de 3638 à 6540 et à ce moment là la boucle recommence du début.
Voici mon code de la procédure:
CREATE OR REPLACE PROCEDURE testopsub001b IS
vcValParam2 VARCHAR2(32767);
vcValParam3 VARCHAR2(32767;
CURSOR C_OPLOPCOD IS
select FIOPF.FIOPF_COD,OPLOP_COD from OPLOP,FIOPF
where OPLOP.FIOPF_COD = FIOPF.FIOPF_COD
AND FIOPF.TOTIE_CODSOC = 7
AND FIOPF.TASTA_COD <>'A'
AND FIOPF.TASTA_COD <>'S';
ivcVAL2 VARCHAR(8);
ivcVAL3 VARCHAR(8);
BEGIN
OPEN C_OPLOPCOD ;
FOR i IN 1..3637
LOOP
FETCH C_OPLOPCOD INTO ivcVAL2,ivcVAL3;
EXIT WHEN C_OPLOPCOD%NOTFOUND;
IF (vcValParam2 is null) THEN
vcValParam2 := ''||(ivcVAL2);
ELSE
vcValParam2 := vcValParam2||'!'||(ivcVAL2);
END IF;
IF (vcValParam3 is null) THEN
vcValParam3 := ''||(ivcVAL3);
ELSE
vcValParam3 := vcValParam3||'!'||(ivcVAL3);
END IF;
END LOOP;
CLOSE C_OPLOPCOD;
vcValParam2 := vcValParam2||'!';
vcValParam3 := vcValParam3||'!';
END;
/
et j'ai une deuxième procédure avec le FOR allant de 3638 à 6540 mais le résultat me ramène les premières lignes et non pas à partir de la ligne 3638!!!
Merci d'avance de votre aide.
Message édité par jarod_93 le 29-01-2010 à 12:19:18