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 :

Flush auto d'un fichier avec UTL FILE


Sujet :

SQL Oracle

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 109
    Points : 78
    Points
    78
    Par défaut Flush auto d'un fichier avec UTL FILE
    Bonjour,

    je développe sous Oracle 10g
    J'écris dans un fichier au moyen de la commande UTL_FILE.PUT_LINE.

    Par défaut à partir de la version 9i, le flush des données sur le disque n'est effectué que lors de l'appel de la fonction UTL_FILE.FFLUSH.

    Or il se trouve que mon fichier physique se remplit au fur et à mesure comme si le paramètre optionnel AUTOFLUSH était à TRUE.

    Est-ce que quelqu'un pourrait m'aiguiller pour comprendre pourquoi mon fichier s'écrit sur le disque sans que je lance la commande FLUSH.

    Merci

  2. #2
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    quels sont les paramètres d'appels à utl_file.put_line ?
    si vous forcez autoflush à false, ça donne quoi ?

  3. #3
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 109
    Points : 78
    Points
    78
    Par défaut
    Les paramètres sont les suivants

    Oracle 8i
    UTL_FILE.PUT_LINE (
    pointeur IN FILE_TYPE,
    tampon IN VARCHAR2)

    Oracle 9i
    UTL_FILE.PUT_LINE (
    pointeur IN FILE_TYPE,
    tampon IN VARCHAR2,
    autoflush IN BOOLEAN DEFAULT FALSE)

    pointeur représente une variable de type UTL_FILE.FILE_TYPE préalablement obtenue par un appel aux fonctions FOPEN() ou FOPEN_NCHAR()
    tampon représente la variable destinée à contenir les données à écrire
    autoflush, positionné à TRUE permet de forcer l'écriture du tampon sur disque.


    Personnellement je fais mon ouverture de fichier comme suit :

    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
    FUNCTION FCT_OUVRE_FICHIER(
    		p_vc_filepath IN VARCHAR2, 
    		p_vc_filename IN VARCHAR2, 
    		p_vc_mode IN VARCHAR2,
    		p_fh_fichier OUT UTL_FILE.FILE_TYPE)
    RETURN BOOLEAN
    IS
    l_bo_ret		BOOLEAN;
    BEGIN
    	p_fh_fichier := UTL_FILE.FOPEN(p_vc_filepath, p_vc_filename, p_vc_mode);
    
    	-- Vérification de l'ouverture correcte du fichier
    	IF NOT UTL_FILE.IS_OPEN(p_fh_fichier) THEN
    		l_bo_ret := false;
    		DBMS_OUTPUT.PUT_LINE('ERREUR OUVERTURE FICHIER '||p_vc_filepath||' '||p_vc_filename);
    	ELSE
    		l_bo_ret := true;
    	END IF;
    
    	RETURN l_bo_ret;
    	
    EXCEPTION
    	WHEN ... THEN
    		...
    		RAISE;
    
    END FCT_OUVRE_FICHIER;
    L'écriture dans le fichier comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    PROCEDURE PRC_ECRIT_FICHIER(p_vc_texte IN VARCHAR2, p_fh_fichier IN UTL_FILE.FILE_TYPE)
    IS
    BEGIN
    	-- Ecriture de la ligne dans le buffer du fichier
    	UTL_FILE.PUT_LINE(p_fh_fichier, p_vc_texte, FALSE);
    
    EXCEPTION
    	WHEN ... THEN
    		...
    		RAISE;
    		
    END PRC_ECRIT_FICHIER;
    Donc je force déjà le paramètre à FALSE

  4. #4
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    Ok. Donc vous forcez déjà à FALSE....

    Etes-vous sûr de ne pas fermer/ouvrir le fichier plusieurs fois ?
    utilisez-vous une DIRECTORY ?

  5. #5
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 109
    Points : 78
    Points
    78
    Par défaut
    Citation Envoyé par LeoAnderson
    Ok. Donc vous forcez déjà à FALSE....

    Etes-vous sûr de ne pas fermer/ouvrir le fichier plusieurs fois ?
    Absolument sûr ...

    Citation Envoyé par LeoAnderson
    utilisez-vous une DIRECTORY ?
    Je ne saisis pas la question ?

  6. #6
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199

  7. #7
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 109
    Points : 78
    Points
    78
    Par défaut
    Bon alors non je n'utilise pas de directory je passe directement le chemin d'accès en écriture.

    Est-ce qu'une des solutions est meilleure que l'autre ???

  8. #8
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    oui, il vaut mieux passer par les directory (possibilité d'affecter des privilèges par utilisateurs et non à toute l'instance par exemple).

Discussions similaires

  1. Fichier avec enregistrement (file and struct)
    Par middo dans le forum Débuter
    Réponses: 3
    Dernier message: 31/03/2010, 14h54
  2. Réponses: 1
    Dernier message: 01/04/2009, 08h02
  3. charger un fichier avec <html:file
    Par air75 dans le forum Struts 1
    Réponses: 5
    Dernier message: 26/03/2008, 09h24
  4. [File] Accès concurrent à un fichier avec un programme Perl
    Par dreamincoco dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 30/11/2005, 18h48
  5. Probleme avec utl-file
    Par Scratch48 dans le forum Oracle
    Réponses: 25
    Dernier message: 12/04/2005, 18h39

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