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 :

erreur ORA-06502 avec UTL_FILE


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 17
    Par défaut erreur ORA-06502 avec UTL_FILE
    Bonjour tout le monde,

    je développe en ce moment un script d'import de tables mi-shell (), mi-PL/SQL.

    L'import se fait via des fichiers csv qui sont nommé comme la table a laquelle ils font référence (ex ma_table.csv). On m'a demandé de mettre en place un filtrage des tables pour l'import (par exemple sur 5 csv présent seulement 3 peuvent être importés). pour faire le filtrage j'ai une table en base de données qui contient la liste des tables autorisées pour la mise à jour.

    c'est sur la partie filtrage que j'ai mon problème. sont fonctionnement est assez simple. en shell je crée un fichier dans lequel je stocke la liste des fichiers csv présent. j'appel par la suite une procédure PL/SQL qui lit le fichier en question ligne par ligne et regarde si la valeur récupérée est présente dans la table. si oui elle est stocké dans un 2eme fichier.

    ma procédure est la suivante :

    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
    PROCEDURE CONTROL_TABLE (in_rep VARCHAR2)
    IS
    liste_fichier UTL_FILE.FILE_TYPE;
    liste_fichier_trie UTL_FILE.FILE_TYPE;
    repertoire VARCHAR2(200);
    fichier VARCHAR2(200);
    fichier_tri VARCHAR2(200);
    ligne VARCHAR2(1000);
    is_ok NUMBER;
    BEGIN
    	repertoire:='TEST_ALIM';
    	fichier:=in_rep || 'chargtabletmp.lst';
    	fichier_tri:='chargtabletri.lst';
    	--ouverture du fichier de liste des tables
    	DBMS_OUTPUT.PUT_LINE('ouverture des fichiers');
    	liste_fichier:=UTL_FILE.FOPEN(repertoire, fichier, 'r');
    	--ouverture du fichier de liste des tables filtrees
    	liste_fichier_trie:=UTL_FILE.FOPEN(repertoire, fichier_tri, 'w');
    	BEGIN
    		LOOP
    			--lecture du fichier en entrée --
    			UTL_FILE.GET_LINE(liste_fichier, ligne);
    			--on recupere seulement le nom de la table
    			is_ok:=test_table(ligne); -- fonction toute bete qui fait un select dans la table et retourne 1 si c'est présent
    			IF is_ok = 1 THEN
    				--écriture du fichier en sortie --
    				UTL_FILE.PUT_LINE(liste_fichier_trie, ligne);
    			END IF;
    		END LOOP;
    	EXCEPTION
    		WHEN NO_DATA_FOUND THEN
    			-- Fermeture des fichiers --
    			UTL_FILE.FCLOSE(liste_fichier) ;
    			UTL_FILE.FCLOSE(liste_fichier_trie) ;
    	END;
    EXCEPTION
    	WHEN OTHERS THEN
    		DBMS_OUTPUT.PUT_LINE('erreur ' || sqlerrm);
    END CONTROL_TABLE;
    lorsque j'execute mon shell j'ai toujours l'erreur suivante :

    ERREUR à la ligne 1 :
    ORA-06502: PL/SQL : erreur numérique ou erreur sur une valeur: tampon de chaîne de caractères trop petit
    ORA-06512: à "ADM_ALIMAUTO", ligne 5
    ORA-06512: à ligne 1

    ADM_ALIMAUTO etant le package auquel appartient la procédure

    après différentes recherche j'ai essayer de jouer tu la taille de mon varchar2 "ligne" en le mettant a 32000, j'ai essayé également de limiter la taille dans le UTL_FILE.FOPEN(repertoire, fichier, 'r', 1000); mais rien n'y fait.

    chose assez étrange ma procédure fonctionne correctement quand je l'exécute via sql developer (enfin elle plante une fois et après fonctionne tout le temps)

    si quelqu'un a une piste je suis preneur car la j'avoue que je ne vois plus trop quoi faire.

    Merci d'avance

    Leftyy

    EDIT1 :
    j'ai testé sous sql developer et sqlplus :
    je me connecte sur sqlplus, j'execute une premiere fois la procédure --> erreur. sans me deconnecter j'execute une deuxieme fois la procédure et la ca fonctionne. je me deconnecte et je me reconnecte et ca recommence la première fois que je l'execute ca plante

  2. #2
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 17
    Par défaut
    bon ben après 4h de test en tout genre j'ai trouvé d'ou venais le problème.

    dans mes spécifications de package j'avais un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    -- CONSTANTES
    c_nom_pkg CONSTANT CHAR(11) := 'ADM_ALIMAUTO';
    qui me servait a rien d'ailleurs!!

    et voila 4h de perdu a cause d'un char(11) au lieu d'un char(12)

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 06/09/2016, 13h39
  2. erreur ora-00907 avec oracle
    Par mehdiyou dans le forum SQL
    Réponses: 3
    Dernier message: 11/04/2008, 22h53
  3. erreur ora-06502 dans procédure stockée
    Par zorino dans le forum SQL
    Réponses: 8
    Dernier message: 17/04/2007, 18h53
  4. [Forms 10g] ora-06502 avec le package dbms_lob
    Par salim11 dans le forum Forms
    Réponses: 2
    Dernier message: 23/01/2007, 19h40
  5. Erreur ORA-12514 avec database link
    Par gafreu dans le forum Administration
    Réponses: 20
    Dernier message: 09/09/2004, 11h53

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