IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

problème de curseur ouvert !


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 17
    Par défaut problème de curseur ouvert !
    Bonjour tout le monde!


    Je travaille sur un programme PL/SQL sous la base Oracle 11g, mais celui-ci a pas mal de soucis à fonctionner...

    Au niveau de mon feedback, j'ai le message d'erreur suivant:
    ORA-06511: PL/SQL: cursor already open


    Voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     DECLARE
      -- déclaration du curseur
         CURSOR my_cursor IS
         SELECT distinct COUNTRY
         from   WW_SITES_JAN;
     
      -- variables d'accueil   
      COUNTRY     VARCHAR2(180); 
      V_GEO       VARCHAR2(50);
      V_REGION    VARCHAR2(180);
      V_COUNTRY   VARCHAR2(180); 
      V_INDUSTRY  VARCHAR2(150); 
      NBR_SOD     NUMBER;
      NBR_DUNS    NUMBER;
     
     
     BEGIN
     
          OPEN my_cursor;  -- ouverture du curseur
     
              For curs IN my_cursor 
     
               LOOP             -- boucle sur les lignes
     
     
                  -- Problème de fetch à résoudre:  "ORA-01422: exact fetch returns more than requested number of rows"  
     
                  FETCH my_cursor
                  INTO COUNTRY;
     
     
                  select distinct geo, region, country, null, count(*)
                  into   V_GEO, V_REGION, V_COUNTRY, V_INDUSTRY, NBR_SOD
                  from   WW_SITES_JAN
                  where  curs.country = country
                  group by geo, region, country;
     
                  insert into toto2 (geo, region, country, site_industry, nbr_sod)
                  values (v_geo, v_region, v_country, v_industry, nbr_sod);
     
     
     
     
                  -- EXIT WHEN my_cursor%NOTFOUND;
     
     
               END LOOP;
     
          CLOSE my_cursor; -- fermeture du curseur
     
     END;
    voilà. Je vous remercie d'avance pour une réponse de votre part

  2. #2
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    C'est OPEN ou For ..., mais pas les deux !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 17
    Par défaut problème de curseur !
    Merci, je viens de comprendre le soucis.

    Mais le problème est qu'en faisant cela:

    J'ai un autre message d'erreur que je ne comprends pas trop, surtout que mon code semble bon...

    ORA-01001: invalid cursor

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    DECLARE
      -- déclaration du curseur
         CURSOR my_cursor IS
         SELECT distinct COUNTRY
         from   WW_SITES_JAN;
     
      -- variables d'accueil   
      COUNTRY     VARCHAR2(180); 
      V_GEO       VARCHAR2(50);
      V_REGION    VARCHAR2(180);
      V_COUNTRY   VARCHAR2(180); 
      V_INDUSTRY  VARCHAR2(150); 
      NBR_SOD     NUMBER;
      NBR_DUNS    NUMBER;
     
     
     BEGIN
     
          --OPEN my_cursor;  -- ouverture du curseur
     
              For curs IN my_cursor 
     
               LOOP             -- boucle sur les lignes
     
     
                  -- Problème de fetch à résoudre:  "ORA-01422: exact fetch returns more than requested number of rows"  
     
                  FETCH my_cursor
                  INTO COUNTRY;
     
     
                  select distinct geo, region, country, null, count(*)
                  into   V_GEO, V_REGION, V_COUNTRY, V_INDUSTRY, NBR_SOD
                  from   WW_SITES_JAN
                  where  curs.country = country
                  group by geo, region, country;
     
                  insert into toto2 (geo, region, country, site_industry, nbr_sod)
                  values (v_geo, v_region, v_country, v_industry, nbr_sod);
     
     
     
     
                  -- EXIT WHEN my_cursor%NOTFOUND;
     
     
               END LOOP;
     
          -- CLOSE my_cursor; -- fermeture du curseur
     
     END;
    Je ne vois pas trop où est le problème...
    Mais je pense que c'est un problème de FETCH . Que je n'arrive d'ailleurs pas à résoudre...

    Merci

    Aoitife

  4. #4
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Cherche For (curseur) dans ce tutoriel pour un exemple

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 17
    Par défaut
    En fait, ca ne résout pas trop mon problème...

    j'ai ouvert mon curseur, et je l'ai refermé avec un CLOSE my_cursor, mais j'ai toujours le meme message d'erreurs:

    ORA-06511: PL/SQL: cursor already open



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    DECLARE
      -- déclaration du curseur
         CURSOR my_cursor IS
         SELECT distinct COUNTRY
         from   WW_SITES_JAN;
     
      -- variables d'accueil   
      COUNTRY     VARCHAR2(180); 
      V_GEO       VARCHAR2(50);
      V_REGION    VARCHAR2(180);
      V_COUNTRY   VARCHAR2(180); 
      V_INDUSTRY  VARCHAR2(150); 
      NBR_SOD     NUMBER;
      NBR_DUNS    NUMBER;
     
     
     BEGIN
     
          OPEN my_cursor;  -- ouverture du curseur
     
              For curs IN my_cursor 
     
               LOOP             -- boucle sur les lignes
     
     
                  -- Problème de fetch à résoudre:  "ORA-01422: exact fetch returns more than requested number of rows"  
     
                  --FETCH my_cursor
                  --INTO COUNTRY;
     
     
                  select distinct geo, region, country, null, count(*)
                  into   V_GEO, V_REGION, V_COUNTRY, V_INDUSTRY, NBR_SOD
                  from   WW_SITES_JAN
                  where  curs.country = country
                  group by geo, region, country;
     
                  Insert Into toto2 (geo, region, country, site_industry, nbr_sod)
                  values (v_geo, v_region, v_country, v_industry, nbr_sod);
     
     
     
     
                   EXIT WHEN my_cursor%NOTFOUND;
     
           -- CLOSE my_cursor; -- fermeture du curseur
     
               END LOOP;
     
            CLOSE my_cursor; -- fermeture du curseur
     
     END;


    help me please !

  6. #6
    Invité
    Invité(e)
    Par défaut
    il faudrait songer à lire les réponses que l'on te fournit !!!

    Citation Envoyé par SheikYerbouti Voir le message
    C'est OPEN ou For ..., mais pas les deux !

Discussions similaires

  1. Problème ! Nombre de curseurs ouverts dépassé
    Par hbellahc dans le forum JDBC
    Réponses: 10
    Dernier message: 30/08/2007, 12h33
  2. [Oracle10g Spatial] Problème : Trop de curseurs ouverts
    Par NeraOne dans le forum Administration
    Réponses: 7
    Dernier message: 15/05/2007, 12h12
  3. [MSDE] Problème de curseur dans une SP
    Par papouAlain dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/07/2005, 11h28
  4. [RESULTSET]ORA-001000 trop de curseurs ouverts
    Par elitost dans le forum JDBC
    Réponses: 7
    Dernier message: 30/06/2005, 13h54
  5. [Trigger] Problème de curseur
    Par Superstivix dans le forum Langage SQL
    Réponses: 3
    Dernier message: 10/06/2004, 10h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo