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

 Oracle Discussion :

ORA-01000: nombre maximum de curseurs ouverts dépassé


Sujet :

Oracle

  1. #1
    Candidat au Club
    Homme Profil pro
    Agent de maitrise
    Inscrit en
    Avril 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Agent de maitrise
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2017
    Messages : 4
    Points : 3
    Points
    3
    Par défaut ORA-01000: nombre maximum de curseurs ouverts dépassé
    Bonjour,
    Je suis nouveau sur le forum.
    Je débute en SQL et avec Oracle et j'ai un souci avec le nombre de curseurs . J'ai vu cependant que le souci a déjà été abordé dans un forum mais il date.
    Je vous fais voir mon code. Je pense les avoir tous fermés correctement et le nombre de curseurs max est de 600 .
    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    SGBDFwk objcSGBDGESTEMPS = new SGBDFwk("r",
    				"",
    				"",
    				"");
     
    		SGBDFwk objlSGBD = new SGBDFwk("", 
    				"", 
    				"", 
    				"CT");
     
    		objcSGBDGESTEMPS.connect();
    		objlSGBD.connect();
    		try {
     
    			PreparedStatement objlLib = objlSGBD.prepare("SELECT LIB FROM TGROUPES WHERE NIVEAU = 1");
    			ResultSet objlResult;
     
    			objlResult = objlLib.executeQuery();
    			String strlLib;
    			StringBuffer strlKey;
    			while(objlResult.next()){
    				strlKey  = new StringBuffer();
    				strlLib = new String(objlResult.getBytes("LIB"),"ISO-8859-1");
     
    				for(int intlCpt = 0; intlCpt < strlLib.length(); intlCpt++){
    					if (Character.isAlphabetic(strlLib.charAt(intlCpt)) || strlLib.charAt(intlCpt) == ' ')
    						strlKey.append(strlLib.charAt(intlCpt));		
    				}
    				if (strlKey.toString() != "")
    					map.put(strlKey.toString(), strlLib);	
    			}
    			objlLib.close();
    			objlResult.close();
     
    			map.forEach((key, value) -> {
    				System.out.println(key);
     
    				PreparedStatement objlStmtRecup = objcSGBDGESTEMPS.prepare("SELECT ent.raison_sociale, cli.codeclient"
    						+ " FROM gestemps.cli_entreprise ent, gestemps.cli_client cli, gestemps.cli_dossier dos"
    						+ " WHERE ent.id=dos.id"
    						+ " AND dos.date_sortie IS NULL AND cli.id = id_cli_client"
    						+ "AND ent.raison_sociale LIKE '%"+key+"%'");
    				try {
    					ResultSet objlRaison = objlStmtRecup.executeQuery();
    				if (objlRaison.next()){
    					String strlValeur = value+";"+objlRaison.getString(1)+";"+objlRaison.getString(2)+"\n";
    					Files.write(Paths.get("/mnt/data/extract/Corres.txt"), strlValeur.getBytes(), StandardOpenOption.APPEND);
    				}
    				objlRaison.close();
    				objlStmtRecup.close();
     
    				} catch (Exception e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    				});
     
     
     
     
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (UnsupportedEncodingException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		finally{
    			objlSGBD.disconnect();
    			objcSGBDGESTEMPS.disconnect();
    		}	
    	}
    }
    Je ne comprends pas où est mon soucis.
    Merci beaucoup .
    Bye

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Je ne sais pas si c'est l'origine du problème, mais l'utilisation du prepare n'est pas bonne.

    Vous devriez plutôt paramétrer votre requête, puis bind exécute dans la boucle, puis fermer votre curseur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    PreparedStatement objlStmtRecup = objcSGBDGESTEMPS.prepare("SELECT ent.raison_sociale, cli.codeclient"
    ...
    						+ "AND ent.raison_sociale LIKE '%:key%'");
    foreach loop 
        //bind
       // connais pas la méthode pour lié le key
        // execute
        ResultSet objlRaison = objlStmtRecup.executeQuery();
    end loop;
    close curseur;

  3. #3
    Candidat au Club
    Homme Profil pro
    Agent de maitrise
    Inscrit en
    Avril 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Agent de maitrise
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2017
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Je suis désolé mais j'ai pas tous compris...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    PreparedStatement objlStmtRecup = objcSGBDGESTEMPS.prepare("SELECT ent.raison_sociale, cli.codeclient"
    						+ " FROM gestemps.cli_entreprise ent, gestemps.cli_client cli, gestemps.cli_dossier dos"
    						+ " WHERE ent.id=dos.id"
    						+ " AND dos.date_sortie IS NULL AND cli.id = id_cli_client"
    						+ "AND ent.raison_sociale LIKE '%"+key+"%'");
    				try {
    					ResultSet objlRaison = objlStmtRecup.executeQuery();
    				if (objlRaison.next()){
    					String strlValeur = value+";"+objlRaison.getString(1)+";"+objlRaison.getString(2)+"\n";
    					Files.write(Paths.get("/mnt/data/extract/Corres.txt"), strlValeur.getBytes(), StandardOpenOption.APPEND);
    				}
    				objlRaison.close();
    				objlStmtRecup.close();
    Je dois faire un foreach dans la méthodes try ?

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Le TRY sera dans le foreach (en tout cas l'exécution de la requête), mais c'est le PREPARE et le CLOSE qui doivent être en dehors de la boucle.

  5. #5
    Candidat au Club
    Homme Profil pro
    Agent de maitrise
    Inscrit en
    Avril 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Agent de maitrise
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2017
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    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
     
     
    				PreparedStatement objlStmtRecup = objcSGBDGESTEMPS.prepare("SELECT ent.raison_sociale, cli.codeclient"
    						+ " FROM gestemps.cli_entreprise ent, gestemps.cli_client cli, gestemps.cli_dossier dos"
    						+ " WHERE ent.id=dos.id"
    						+ " AND dos.date_sortie IS NULL AND cli.id = id_cli_client"
    						+ "AND ent.raison_sociale LIKE '%"+key+"%'");
                                    objlStmtRecup.close();
     
    map.forEach((key, value) -> {
    				System.out.println(key);
     
    				try {
    					ResultSet objlRaison = objlStmtRecup.executeQuery();
    				if (objlRaison.next()){
    					String strlValeur = value+";"+objlRaison.getString(1)+";"+objlRaison.getString(2)+"\n";
    					Files.write(Paths.get("/mnt/data/extract/Corres.txt"), strlValeur.getBytes(), StandardOpenOption.APPEND);
    				}
    				objlRaison.close();
     
     
    				} catch (Exception e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    				});
    Comme ça ? Mais maintenant j'ai une erreur sur 'key'.
    Je suis désolé si mes questions sont idiotes. Je commence dans le dev....

  6. #6
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Je ne connais pas le langage que vous utilisez je ne fournirais donc pas de code.
    L'idée est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Prepare
    loop
        bind
        execute
    end loop
    close
    Je vous laisse vous documenter sur comment utiliser les requêtes paramétrées (bind variable) avec votre langage.

    Après je ne sais pas si c'est l'origine de votre erreur, mais ça pourrait, c'est surtout plus propre et performant.

  7. #7
    Candidat au Club
    Homme Profil pro
    Agent de maitrise
    Inscrit en
    Avril 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Agent de maitrise
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2017
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Merci
    Bonjour ,
    Merci pour votre réponse .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Doctrine] ORA-0100 nombre maximum de curseurs ouverts dépassé :
    Par Tyra3l dans le forum ORM
    Réponses: 5
    Dernier message: 02/07/2011, 22h50
  2. ORA-01000: nombre maximum de curseurs ouverts dépassé
    Par opensource dans le forum Débuter
    Réponses: 3
    Dernier message: 20/04/2011, 13h30
  3. ORA-01000: Nombre maximum de curseurs ouverts atteint
    Par nihilist dans le forum Oracle
    Réponses: 2
    Dernier message: 18/08/2010, 12h08
  4. ORA-01000: nombre maximum de curseurs ouverts dépassé
    Par ouadie99 dans le forum Accès aux données
    Réponses: 6
    Dernier message: 01/09/2008, 10h03
  5. Réponses: 6
    Dernier message: 17/09/2007, 12h50

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