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 :

Génération d'un fichier à partir de PL/SQL


Sujet :

PL/SQL Oracle

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations forums :
    Inscription : Avril 2012
    Messages : 20
    Points : 27
    Points
    27
    Par défaut Génération d'un fichier à partir de PL/SQL
    Bonjour,

    J'ai stocké une image dans la base, après je veux régénérer un fichier à partir d'un BLOB .

    Voici la procédure que j'ai utilisée
    j'ai tout exécuter mais je ne trouve rien sur le disque?

    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
     
    PROCEDURE write_blob(p_id NUMBER, p_name VARCHAR2) IS
      v_file       utl_file.file_type;
      v_repertoire VARCHAR2(512) := 'c:\temp\';
      v_fichier    VARCHAR2(256) := p_name;
      v_buffer     RAW(32000);
      v_offset     PLS_INTEGER DEFAULT 1;
      v_taille     PLS_INTEGER;
      v_longueur   PLS_INTEGER;
      v_chunk      PLS_INTEGER;
      v_blob       BLOB;
    BEGIN
     -- On récupére le BLOB
      SELECT image INTO v_blob FROM t_blob WHERE id = 1;
      -- On l'ouvre en lecture afin de pouvoir le parser plus facilement
      dbms_lob.OPEN(v_blob, dbms_lob.lob_readonly);
      -- On regarde la taille de Chunk idéale
      v_chunk := dbms_lob.getchunksize(v_blob);
      -- On regarde sa longueur
      v_longueur := dbms_lob.getlength(v_blob);
      -- On crée le fichier sur le disque dur
      v_file     := utl_file.fopen(v_repertoire, v_fichier, 'w', 32767);
      -- On ecrit dans le fichier tant que l'on a pas fait tout le BLOB
      WHILE v_offset < v_longueur LOOP
        IF v_longueur - (v_offset - 1) > v_chunk THEN
          v_taille := v_chunk;
        ELSE
          v_taille := v_longueur - (v_offset - 1);
        END IF;
        v_buffer := NULL;
        -- On lit la partie du BLOB qui nous interesse
        dbms_lob.READ(v_blob, v_taille, v_offset, v_buffer);
        -- On ecrit cette partie dans le fichier
        utl_file.put(file => v_file, buffer => utl_raw.cast_to_varchar2(v_buffer));
        utl_file.fflush(file => v_file);
        v_offset := v_offset + v_taille;
      END LOOP;
      -- On ferme le BLOB
      dbms_lob.CLOSE(v_blob);
      -- On ferme le fichier
      utl_file.fclose(v_file);EXCEPTION
      WHEN OTHERS THEN
        IF dbms_lob.ISOPEN(v_blob) = 1 THEN
          dbms_lob.CLOSE(v_blob);
        END IF;
        IF utl_file.is_open(file => v_file) THEN
          utl_file.fclose(file => v_file);
        END IF;
    END;

  2. #2
    Membre confirmé
    Avatar de Bibeleuh
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2010
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2010
    Messages : 209
    Points : 542
    Points
    542
    Par défaut
    Bonjour,

    Je pense que c'est important à lire si ce n'est pas déjà fait :

    http://sheikyerbouti.developpez.com/...?page=Chap8#L8

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 6
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    Cherches tu ton fichier sur ton Poste client ou sur le serveur DB ?

    Dans ton cas c'est sur le serveur que le fichier est créé.

    Bien à toi

    PS.
    Je ne suis pas certain que le format de sortie que tu utilises pour écrire un fichier binaire soit adéquat. (ouvre le en mode binaire)

  4. #4
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par happymiss Voir le message
    ...
    j'ai tout exécuter mais je ne trouve rien sur le disque?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ...
      WHEN OTHERS THEN
        IF dbms_lob.ISOPEN(v_blob) = 1 THEN
          dbms_lob.CLOSE(v_blob);
        END IF;
        IF utl_file.is_open(file => v_file) THEN
          utl_file.fclose(file => v_file);
        END IF;
    END;
    WHEN OTHERS non suvi par un Raise c'est le bug numéro 1 un PL/SQL

Discussions similaires

  1. Réponses: 4
    Dernier message: 29/06/2012, 16h00
  2. Réponses: 3
    Dernier message: 19/08/2011, 14h47
  3. Génération d'un fichier à partir d'une requête
    Par FABFAB125 dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/05/2010, 07h46
  4. [PAMC]génération d'un mcd à partir d'un script sql
    Par jounaidi dans le forum Sybase
    Réponses: 2
    Dernier message: 27/03/2006, 17h43
  5. [SQL*Plus] génération dynamique du fichier de spool
    Par lalystar dans le forum Oracle
    Réponses: 3
    Dernier message: 06/12/2004, 10h44

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