Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
790 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  résolu: problème curseur

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

résolu: problème curseur

n°1961207
jarod_93
Posté le 28-01-2010 à 13:07:37  profilanswer
 

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
mood
Publicité
Posté le 28-01-2010 à 13:07:37  profilanswer
 

n°1961219
casimimir
Posté le 28-01-2010 à 13:46:28  profilanswer
 

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

n°1961222
jarod_93
Posté le 28-01-2010 à 13:55:04  profilanswer
 

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

n°1961235
casimimir
Posté le 28-01-2010 à 14:17:27  profilanswer
 

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 :
  1. CREATE OR REPLACE PROCEDURE testopsub001b IS
  2. vcValParam2 VARCHAR2(32767);
  3. vcValParam3 VARCHAR2(32767;
  4. CURSOR C_OPLOPCOD IS
  5. SELECT FIOPF.FIOPF_COD,OPLOP_COD FROM OPLOP,FIOPF
  6. WHERE OPLOP.FIOPF_COD = FIOPF.FIOPF_COD
  7. AND FIOPF.TOTIE_CODSOC = 7
  8. AND FIOPF.TASTA_COD <>'A'
  9. AND FIOPF.TASTA_COD <>'S';
  10.  
  11. ivcVAL2 VARCHAR(8);
  12. ivcVAL3 VARCHAR(8);
  13.  
  14. BEGIN
  15.  
  16. OPEN C_OPLOPCOD ;
  17. FOR i IN 1..3637  
  18. LOOP
  19.  FETCH C_OPLOPCOD INTO ivcVAL2,ivcVAL3;
  20.  EXIT WHEN C_OPLOPCOD%NOTFOUND;
  21.  
  22.  IF (vcValParam2 IS NULL) THEN
  23.   vcValParam2 := ''||(ivcVAL2);
  24.  ELSE
  25.   vcValParam2 := vcValParam2||'!'||(ivcVAL2);
  26.  END IF;
  27.  
  28.  IF (vcValParam3 IS NULL) THEN
  29.   vcValParam3 := ''||(ivcVAL3);
  30.  ELSE
  31.   vcValParam3 := vcValParam3||'!'||(ivcVAL3);
  32.  END IF;
  33.  
  34. END LOOP;
  35.  
  36. LOOP
  37.  FETCH C_OPLOPCOD INTO ivcVAL2,ivcVAL3;
  38.  EXIT WHEN C_OPLOPCOD%NOTFOUND;
  39.  -- ton traitement
  40. END LOOP;
  41.  
  42. CLOSE C_OPLOPCOD;
  43. vcValParam2 := vcValParam2||'!';
  44. vcValParam3 := vcValParam3||'!';
  45. END;

n°1961246
jarod_93
Posté le 28-01-2010 à 14:35:26  profilanswer
 

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.

n°1961259
casimimir
Posté le 28-01-2010 à 14:56:38  profilanswer
 

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 ....

n°1961484
jarod_93
Posté le 29-01-2010 à 10:12:38  profilanswer
 

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

n°1961529
jarod_93
Posté le 29-01-2010 à 12:18:00  profilanswer
 

C'est bon j'ai obtenu ce que je voulais.
 
Merci encore pour la participation.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  résolu: problème curseur

 

Sujets relatifs
problème graphique lors de la lecture d'une video[resolu] Remplacer un lien par du texte une fois cliqué
Probleme executer jar sur Linux[Résolu] Python 2.6, MySQLdb et Windows, la combinaison perdante ?
[RESOLU] Soucis avec mysql_fetch_array dans une fonctionProblème de débutant
Problème lien hypertext en localhost[RESOLU] Question simple sur la DTD
[RESOLU][SQL SERVER] Problème de curseur[RESOLU]probleme curseur main
Plus de sujets relatifs à : résolu: problème curseur


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR