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 :

Ecrire BLOB > 32767 octets dans un fichier


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
    Juillet 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Morbihan (Bretagne)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 41
    Par défaut Ecrire BLOB > 32767 octets dans un fichier
    Bonjour à tous,

    est ce que qulequ'un aurait un exemple de PL/SQL permettant d'écrire un BLOB dans un fichier sur disque avec les restrictions suivantes :

    -Oracle 9
    -Taille de BLOB > 32767 octets
    - Contenu binaire

    Merci pour votre aide.

  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
    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
    CREATE OR REPLACE PROCEDURE Write_Binary_File
      (
         PC$Directory IN VARCHAR2
        ,PC$File_Name IN VARCHAR2
        ,PC$SQL_Order IN VARCHAR2
        ,PB$Raise     IN BOOLEAN  DEFAULT FALSE
      )
      --  -------------------------------------------
      --  Procedure to dump a BLOB column onto a file
      --  -------------------------------------------
      --  parameters:
      --  PC$Directory : name of an existing Oracle Directory
      --  PC$File_Name : name of the expected output file
      --  PC$SQL_Order : SQL order to select the BLOB column
      --  PB$Raise     : boolean to indicate if the process
      --                 would be stopped after an error
      --
       IS
        src_lob      BLOB;
        buffer       RAW(16384);
        amt          BINARY_INTEGER := 16384;
        pos          INTEGER := 1;
        LF$FicOUT     UTL_FILE.FILE_TYPE ;
        LC$Msg       VARCHAR2(2000) ;
      BEGIN
     
        -- get the BLOB column --
        BEGIN
          EXECUTE IMMEDIATE PC$SQL_Order INTO src_lob ;
        EXCEPTION
          WHEN NO_DATA_FOUND THEN
            LC$Msg := 'Write_Binary_File(): NO_DATA_FOUND' ;
            IF PB$Raise THEN
              RAISE_APPLICATION_ERROR( -20100, LC$Msg ) ;
            END IF ;
            DBMS_OUTPUT.PUT_LINE(LC$Msg) ;
            RETURN ;
        END  ;
     
        -- open the output file --
        LF$FicOUT := UTL_FILE.FOPEN( PC$Directory, PC$File_Name, 'W', 32764 ) ;
     
        -- write the file --
        LOOP
           -- read the chunks --
           Dbms_Lob.READ (src_lob, amt, pos, buffer);
           -- write the chunks --
             UTL_FILE.Put_Raw(LF$FicOut, buffer);
           pos := pos + amt;
        END LOOP;
        -- close the file --
        UTL_FILE.FCLOSE(LF$FicOut);
     
      EXCEPTION
        WHEN NO_DATA_FOUND THEN
            UTL_FILE.FCLOSE(LF$FicOut);
        WHEN OTHERS THEN
          LC$Msg := 'Write_Binary_File() Error : ' || TO_CHAR( SQLCODE ) || ' while managing file ('
           || PC$Directory || ') ' ||  PC$File_Name ;
          IF PB$Raise THEN
             RAISE_APPLICATION_ERROR( -20100, LC$Msg ) ;
          END IF ;
          DBMS_OUTPUT.PUT_LINE(LC$Msg);
      END Write_Binary_File;
    /

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Morbihan (Bretagne)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 41
    Par défaut
    Merci mais cette fonction (que j'avait déjà trouvé par ailleurs) ne semble pas fonctionner avec un pdf ??
    A l'ouverture du pdf, un obtient une erreur .
    Je pense que certains caractères ont été interprétés (CR, LF, caractères spéciaux utilisés par le format pdf...)

  4. #4
    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
    Je viens de l'utiliser avec un fichier PDF, généré sur une machine Unix et rapatrié sur mon poste Windows avec FileZilla et je le consulte sans problème.
    Essayez de voir si le fichier n'est pas déjà "comme cela" dans la colonne BLOB.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Morbihan (Bretagne)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 41
    Par défaut
    Je viens de rapatrier directement le contenu du blob et j'arrive bien à l'ouvrir et le visualiser correctement.

    est ce que ton fichier pdf est > 32767 octets ?

  6. #6
    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
    J'ai un résultat correct sur un fichier de 1Mo

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/06/2006, 14h33
  2. Ecrire à la suite du texte dans un fichier
    Par micatmidog dans le forum Général Python
    Réponses: 2
    Dernier message: 21/12/2005, 19h38
  3. Réponses: 8
    Dernier message: 02/11/2005, 17h24
  4. [langage] Ecrire un bloc de texte dans un fichier
    Par sarahbes dans le forum Langage
    Réponses: 6
    Dernier message: 10/06/2004, 11h40
  5. Réponses: 4
    Dernier message: 23/10/2003, 08h03

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