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 :

Comment Ouvrir un "blob" avec une commande sql


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 99
    Par défaut Comment Ouvrir un "blob" avec une commande sql
    Bonjour à tous,

    je souhaiterais savoir s'il est possible d'une part d'ouvrir un fichier de type blob, et d'en sauvegarder le contenu avec des commandes sql, j'ai lu des choses sur ce sujet, mais je n'ai pas bien compris, il faut savoir que j'ai des accès limité sur la base de données, par exemple je ne peux pas créer de tables, je peux juste voir (et lire ces données).
    Je travaille avec SQL-Developer.

    Voici ce que je veux faire
    Nom : img2.png
Affichages : 2448
Taille : 7,7 Ko

    Au moyen d'un export, générer sur mon micro, un fichier par exemple de type "xml". Cela me semble possible, une autre contrainte je ne peux pas utiliser de commande java ....., seul le sql est possible pour moi.

    Vous ayant expliqué mes contraintes et mon besoin, est-ce possible et comment?

    Vous remerciant par avance
    Bonne journée à tous et à bientôt j'espère

  2. #2
    Membre confirmé
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Janvier 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2014
    Messages : 28
    Par défaut
    Bonjour,

    Via Sql Developper tu peux :
    - aller sur ta table, onglet données
    - clic droit "vue d'enregistrement unique
    - sur ta colonne, clic sur le crayon
    - la nouvelle fenêtre contient l'action "Télécharger" en haut vers le milieu

    C'est je pense le plus simple pour une action unitaire.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 99
    Par défaut Merci, mais je voudrais en ouvrir plusieurs (beaucoup, alors ...)
    Bonjour
    merci pour ta réponse, j'aurais dû préciser dans ma question que j'ai besoin d'en ouvrir plusieurs dizaines d'où ma demande, ce que ta réponse convient comme tu l'as précisé pour de l'unitaire, et ça je savais faire, mais s'il y en a beaucoup ma question prend tout son sens.
    D'avance Merci à celles ou ceux qui ont idée
    Bonne journée

  4. #4
    Membre confirmé
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Janvier 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2014
    Messages : 28
    Par défaut
    Une procédure trouvée il y a quelques années sur le net :
    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
     
      procedure to_file(dir in varchar2, file in varchar2, lob in blob) is
        output_file    utl_file.file_type;
        chunk_size     constant pls_integer := 4096;
        buf            raw                    (4096); -- Must be equal to chunk_size
        written_sofar  pls_integer := 0;              --(avoid PLS-00491: numeric literal required)
        bytes_to_write pls_integer;
        lob_len        pls_integer;
      begin
     
        lob_len := dbms_lob.getlength(lob);
     
        output_file := utl_file.fopen(dir, file, 'WB');
     
        while written_sofar + chunk_size < lob_len loop
     
          bytes_to_write := chunk_size;
          dbms_lob.read(lob,bytes_to_write,written_sofar+1,buf);
          utl_file.put_raw(output_file,buf);
          written_sofar := written_sofar + chunk_size;
     
        end loop;
     
        bytes_to_write := lob_len-written_sofar;
        dbms_lob.read(lob,bytes_to_write,written_sofar+1,buf);
        utl_file.put_raw(output_file,buf);
     
        utl_file.fclose(output_file);
     
      end to_file;

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 99
    Par défaut Besoin de précisions
    Bonjour,
    merci pour ton aide, j'ai essayé d'analyser cette procédure, malheureusement je ne connais rien (pour l'instant) à ce type de commandes, alors je suis aller glaner sur le net des infos sur ce sujet. Et voici ce qui me reste encore comme questions, à travers les snapshots que je mets il sera peut-être + facile d'adapter la requête que tu m'as mis en réponse, sinon d'adapter celle que j'ai trouvée.
    Voici la structure de ma base de données (elle est très simple car elle n'a qu'un but c'est de me permettre de comprendre :
    Nom : TestBlob1.jpg
Affichages : 2430
Taille : 20,1 Ko

    et en voici le contenu
    Nom : TestBlob2.jpg
Affichages : 2540
Taille : 39,3 Ko

    et enfin voici le message d'erreur qui apparaît
    Nom : TestBlob3.jpg
Affichages : 2497
Taille : 21,7 Ko

    avec cette procédure :
    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
    CREATE OR REPLACE PROCEDURE test_read_bfile IS
    Lob_loc BFILE;
    blobValue BLOB;
    binary_buffer_var RAW(25);
    offset INTEGER := 1;
    amount_var INTEGER := 25;
     
    BEGIN
    /* Select the LOB: */
    SELECT XML_TEST INTO Lob_loc FROM TEST_OPBLOB
    WHERE DEPOT = 'ZZZ';
    /* Open the BFILE: */
    DBMS_LOB.OPEN(blobValue, amount_var, offset, binary_buffer_var);
    /* Read data: */
    DBMS_LOB.READ(blobValue, amount_var, offset, binary_buffer_var);
    /* Close the BFILE: */
    DBMS_LOB.CLOSE(Lob_loc);
    END;

    Peut-être que quelqu'un ayant des connaissances plus profondes que moi (et ce ne sera pas difficile) pourra-t-il m'aider ?
    Vous remerciant par avance
    Je vous souhaite à tous une très bonne journée

  6. #6
    Membre confirmé
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Janvier 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2014
    Messages : 28
    Par défaut
    DBMS_LOB.OPEN n'admet que 2 paramètres :
    - le premier BLOB, CLOB ou BFILE
    - le second Binary_integer

Discussions similaires

  1. Importer un fichier csv dans une table avec une commande sql ?
    Par pepito62 dans le forum Import/Export
    Réponses: 8
    Dernier message: 25/03/2015, 15h10
  2. Comment ouvrir un fichier excel avec une commande batch ?
    Par Alexandrebox dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 18/03/2010, 13h15
  3. Comment créer un site immobilier dynamique avec une base de données ?
    Par Alain troverti dans le forum Général Conception Web
    Réponses: 14
    Dernier message: 07/07/2006, 21h57

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