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

SQL Oracle Discussion :

[ORA 9i] UTL_FILE et ORA- 29285


Sujet :

SQL Oracle

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 120
    Par défaut [ORA 9i] UTL_FILE et ORA- 29285
    ,

    J'ai une petite procédure qui permet de générer du contenu XML dans un lob et de créer ensuite un fichier texte avec UTL_FILE ... Le problème est que de temps en temps (je dirais même aléatoirement ... du moins je ne trouve pas de dénominateur commun ...) elle me déclenche une erreur 29285 ...

    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 GEN_FICHIER_XML(P_REQUETE IN VARCHAR2, P_CHEMIN IN VARCHAR2, P_FICHIER IN VARCHAR2) IS
     
      LXML_FILE UTL_FILE.FILE_TYPE;
      LLOB_XML CLOB;
      LBOO_CONTINUE BOOLEAN := TRUE;
      LINT_BUFFER INT := 32000; 
      LCTX_CTX DBMS_XMLQUERY.CTXTYPE;
     
    BEGIN
     
    -- Creation du XML dans un LOB
    LCTX_CTX := DBMS_XMLQUERY.NEWCONTEXT(P_REQUETE);
    DBMS_XMLQUERY.SETDATEFORMAT(LCTX_CTX, 'dd/MM/yyyy HH:mm:ss');
    DBMS_XMLQUERY.SETENCODINGTAG(LCTX_CTX, 'windows-1252');
    DBMS_LOB.CREATETEMPORARY(LLOB_XML,True,10);
    LLOB_XML := DBMS_XMLQUERY.GETXML(LCTX_CTX);
    DBMS_XMLQUERY.CLOSECONTEXT(LCTX_CTX);
    -- Creation du fichier XML de reception
    LXML_FILE := UTL_FILE.FOPEN(P_CHEMIN, P_FICHIER, 'w', LINT_BUFFER+2);
    -- Remplissage du fichier XML de reception par le LOB
    WHILE LBOO_CONTINUE LOOP
      IF LENGTH(LLOB_XML) > LINT_BUFFER THEN
        UTL_FILE.PUT(LXML_FILE, SUBSTR(LLOB_XML, 1, LINT_BUFFER));
        UTL_FILE.FFLUSH(LXML_FILE);
        LLOB_XML := SUBSTR(LLOB_XML, LINT_BUFFER + 1);
      ELSE
        UTL_FILE.PUT(LXML_FILE, SUBSTR(LLOB_XML, 1, LENGTH(LLOB_XML)));
        LBOO_CONTINUE := FALSE;
      END IF;
    END LOOP;
     
    DBMS_LOB.FREETEMPORARY(LLOB_XML);
    UTL_FILE.FCLOSE(LXML_FILE);
     
    EXCEPTION
      WHEN OTHERS THEN
        LOG_ERREUR('GEN_FICHIER_XML REQUETE=' || P_REQUETE || ' - CHEMIN=' || P_CHEMIN ||
    ' - FICHIER=' || P_FICHIER, SQLERRM);
    END GEN_FICHIER_XML;
    • Le directory existe bien (et toujours).
    • Le principe que j'utilise est donc de découper mon XML par paquet de 32000 caractères, de le flush dans un fichier et ensuite traiter les autres paquets ... jusque la fin du fichier ...


    Mais malheuresement cela n'arrive pas à coup sur à bout !

    Quelqu'un aurait il une idée ?

    Merci d'avance !

  2. #2
    Membre expérimenté Avatar de DAB.cz
    Inscrit en
    Octobre 2006
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 221
    Par défaut
    La ligne du fischier texte est limitée, FLUSH est buffer ne peuvent pas aider.

    http://www.developpez.net/forums/sho...d.php?t=424076

    DAB

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 120
    Par défaut
    En fait le problème était externe et du à un timeout d'execution !

    Le code présent est bon si quelqu'un veut l'utiliser mais si on appele de l'extérieur il ne faut pas oublier que par ADO le timeout d'execution est par défaut à 30s donc ...

  4. #4
    Membre expérimenté Avatar de DAB.cz
    Inscrit en
    Octobre 2006
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 221
    Par défaut
    Citation Envoyé par scornille Voir le message
    En fait le problème était externe et du à un timeout d'execution !

    Le code présent est bon si quelqu'un veut l'utiliser mais si on appele de l'extérieur il ne faut pas oublier que par ADO le timeout d'execution est par défaut à 30s donc ...
    Je ne suis pas d'accord. J'ai ajusté l'exemple et l'ai testé par SQL*Plus sur 10.1.0.2.

    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
    create or replace PROCEDURE GEN_FICHIER_XML(P_REQUETE IN VARCHAR2, P_CHEMIN IN VARCHAR2, P_FICHIER IN VARCHAR2) IS
     
      LXML_FILE UTL_FILE.FILE_TYPE;
      LLOB_XML CLOB;
      LBOO_CONTINUE BOOLEAN := TRUE;
      LINT_BUFFER INT := 32000; 
     
    BEGIN
     
    select xmlelement ("root", xmlagg (xmlelement ("abc", dummy))).getClobVal ()
      into LLOB_XML
      from dual
      connect by level <= to_number (p_requete);
     
    -- Creation du fichier XML de reception
    LXML_FILE := UTL_FILE.FOPEN(P_CHEMIN, P_FICHIER, 'w', LINT_BUFFER+2);
    -- Remplissage du fichier XML de reception par le LOB
    WHILE LBOO_CONTINUE LOOP
      IF LENGTH(LLOB_XML) > LINT_BUFFER THEN
        UTL_FILE.PUT(LXML_FILE, SUBSTR(LLOB_XML, 1, LINT_BUFFER));
        UTL_FILE.FFLUSH(LXML_FILE);
        LLOB_XML := SUBSTR(LLOB_XML, LINT_BUFFER + 1);
      ELSE
        UTL_FILE.PUT(LXML_FILE, SUBSTR(LLOB_XML, 1, LENGTH(LLOB_XML)));
        LBOO_CONTINUE := FALSE;
      END IF;
    END LOOP;
     
    DBMS_LOB.FREETEMPORARY(LLOB_XML);
    UTL_FILE.FCLOSE(LXML_FILE);
     
    EXCEPTION
      WHEN OTHERS THEN
        raise;
    END GEN_FICHIER_XML;
    /
    Le résultat:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SQL> exec GEN_FICHIER_XML(2665, 'XDIR', 'abc.xml')
    
    Procedura PL/SQL úspěšně dokončena.
    
    SQL> exec GEN_FICHIER_XML(2666, 'XDIR', 'abc.xml')
    BEGIN GEN_FICHIER_XML(2666, 'XDIR', 'abc.xml'); END;
    
    *
    ERROR na řádku 1:
    ORA-29285: chyba zápisu souboru
    ORA-06512: na "SYSTEM.GEN_FICHIER_XML", line 34
    ORA-06512: na line 1
    Première démarrage a créé le fichier (seule ligne) 31995 octets long.
    UTL_FILE limite: max_linesize - Maximum number of characters for each line, including the newline character, for this file (minimum value 1, maximum value 32767). If unspecified, Oracle supplies a default value of 1024.

    DAB

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 19/11/2009, 14h17
  2. ORA-06512: à "SYS.UTL_FILE"
    Par farenheiit dans le forum Administration
    Réponses: 4
    Dernier message: 23/10/2007, 16h48
  3. [Ora 10g]Utl_file.fopen et erreur ORA-29283
    Par TiteCoCo dans le forum SQL
    Réponses: 7
    Dernier message: 19/12/2006, 10h25
  4. [Pl/Sql] ORA-29280 Utl_file
    Par claralavraie dans le forum Oracle
    Réponses: 10
    Dernier message: 28/07/2006, 11h41
  5. Comment se connecter? (ORA-28009 suivi de ORA-01031)
    Par nmathon dans le forum Connexions aux bases de données
    Réponses: 3
    Dernier message: 27/09/2005, 21h59

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