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

Oracle Discussion :

insertion d'un JPG dans un BLOB sur Oracle 8i


Sujet :

Oracle

  1. #1
    Yaz
    Yaz est déconnecté
    Nouveau membre du Club
    Inscrit en
    Avril 2002
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 56
    Points : 36
    Points
    36
    Par défaut [Résolu] insertion d'un JPG dans un BLOB sur Oracle 8i
    Salut,

    Je souhaiterais connaître la façon d'insérer une image jpg dans un champ de type BLOB avec une clause de type INSERT ou autre.

    Merci de vos réponses

    :

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Points : 1 326
    Points
    1 326
    Par défaut
    Alors dans l'ordre il faut

    que le dba crée un lien vers un repertoire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    create or replace directory carldir as '/tmp';
    ou c:\tmp sous windows

    Ensuite tu crées une table qui contiendras tes blobs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    create table blobtab(index_col integer, blob_col blob);

    Ensuite tu dois crées une ligne contenant un BLOB vide afin que Oracle puisse avoir un pointeur vers le BLOB
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    insert into blobtab(index_col, blob_col)
    values(1, empty_blob()); 
    COMMIT;

    Ensuite tu executes la procédure suivante

    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
    CREATE OR REPLACE PROCEDURE insert_blob (v_name VARCHAR2, v_index NUMBER)
    IS 
    ablob BLOB;   
    abfile BFILE := bfilename(v_name, 'cc');   
    amount INTEGER;   
    asize INTEGER; 
    BEGIN 
    SELECT blob_col INTO ablob from blobtab WHERE index_col = v_index;   dbms_lob.fileopen(abfile);   
    asize := dbms_lob.getlength(abfile);   
    dbms_output.put_line('Size of input file: ' || asize);   
    dbms_lob.loadfromfile(ablob, abfile, asize);   
    dbms_output.put_line('After loadfromfile');  
    asize := dbms_lob.getlength(ablob);   
    dbms_output.put_line('Size of blob: ' || asize);   
    dbms_lob.close(ablob);
    EXCEPTION 
    WHEN OTHERS THEN       
    dbms_output.put_line('An exception occurred');       
    dbms_output.put_line(sqlcode || sqlerrm); 
    END;
    Et la si tout se passe bien ton image sera insérée dans la base

  3. #3
    Yaz
    Yaz est déconnecté
    Nouveau membre du Club
    Inscrit en
    Avril 2002
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 56
    Points : 36
    Points
    36
    Par défaut Merci mais ....
    Merci pour ta réponse !

    mais je n'arrive pas à pointer sur l'image à insérer. Pourtant le chemin de mon image est correct (je pense).

    :

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Points : 1 326
    Points
    1 326
    Par défaut
    Arf attention j'ai oublié de préciser. Lors de la création du directory, tu devras OBLIGATOIREMENT mettre l'image a insérer dans ce repertoire sinon ca ne marchera jamais. De plus tu n'auras pas besoin ensutie de mettre le chemin complet dans l'appel de procédure mais juste le nom du fichier.

    Si cela ne marche toujours pas je regarderai pour une autre méthode.

    Sinon je te conseille un très très bon site http://asktom.oracle.com ou tu trouveras surement une réponse à ta question.

  5. #5
    Yaz
    Yaz est déconnecté
    Nouveau membre du Club
    Inscrit en
    Avril 2002
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 56
    Points : 36
    Points
    36
    Par défaut toujours rien de créer !
    Malheureusement, le blob ne se remplit toujours pas avec l'image. J'ai cherché sur d'autres forums et la méthode que tu m'as donné semble être la plus utilisé mais je ne comprends toujours pas pourquoi cela ne fonctionne pas sur ma machine !

    :

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Points : 1 326
    Points
    1 326
    Par défaut
    Quel est l'erreur que tu obtiens???

    sinon voila une url ou il explique (en anglais) comment faire

    http://askremi.ora-0000.com/question/show?id=318035

  7. #7
    Yaz
    Yaz est déconnecté
    Nouveau membre du Club
    Inscrit en
    Avril 2002
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 56
    Points : 36
    Points
    36
    Par défaut
    aucune erreur il me dit : Procédure PL/SQL terminée avec succès

    Voila le code que j'utilise :
    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
     
    create or replace directory carldir as '\Temp';  
     
    insert into stfichierphoto values (1,empty_blob()); 
     
    CREATE OR REPLACE PROCEDURE insert_blob (v_name VARCHAR2, v_index NUMBER) 
    IS 
    ablob BLOB;    
    abfile BFILE := bfilename('v_name', 'v_index');    
    amount INTEGER;    
    asize INTEGER; 
    BEGIN 
    SELECT slefph INTO ablob from stfichierphoto WHERE spnlptofph = v_index ;   
    dbms_lob.fileopen(abfile);    
    asize := dbms_lob.getlength(abfile);    
    dbms_output.put_line('Size of input file: ' || asize);    
    dbms_lob.loadfromfile(ablob, abfile, asize);    
    dbms_output.put_line('After loadfromfile');  
    asize := dbms_lob.getlength(ablob);    
    dbms_output.put_line('Size of blob: ' || asize);    
    EXCEPTION WHEN OTHERS THEN
    dbms_output.put_line('An exception occurred');        
    dbms_output.put_line(sqlcode || sqlerrm); 
    END;  
    /
     
    execute insert_blob('toto.jpg',1);
    commit;
    Par contre le dir Temp correspond à celui de ma machine ou à celui du serveur Oracle quand je crée le directory ?

    : :

    Merci pour tes réponses

  8. #8
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Points : 1 326
    Points
    1 326
    Par défaut
    Ah voila c'est c:\temp sous windows et non pas \temp moi je l'avais mis au format linux désolé.

    Et oui le répertoire doit correspondre a un repertoire de ton server.

    Autre chose et cela est de ma faute je vais modifier cela de suite, fais un commit tout de suite apres le insert sinon cela ne validera jamais la transaction.

  9. #9
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Points : 1 326
    Points
    1 326
    Par défaut
    Si la méthode précédente n'a pas marcher je t'en remet une ici qui me semble plus simple (meme si tres tres proche)

    Etape 1:
    Création d'une table qui contiendra les blob

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE TABLE blobs 
    ( id VARCHAR2(255), 
    blob_col BLOB 
    );
    Etape 2:
    Création d'un répertoire logique dans la base permettant d'avoir un pointeur vers le disque physique.(l'exmple fonctionne pour windows)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE OR REPLACE DIRECTORY MY_FILES AS 'c:\images';
    Etape 3:
    Création de la procédure qui permettra d'insérer l'image (ici aria.gif qui devra obligatoirement exister dans c:\images)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CREATE OR REPLACE PROCEDURE insert_img AS 
    f_lob bfile; 
    b_lob blob; 
    BEGIN
    INSERT INTO blobs VALUES ( 'MyGif', empty_blob() ) 
    RETURN blob_col INTO b_lob; 
    f_lob := bfilename( 'MY_FILES', 'aria.gif' ); 
    dbms_lob.fileopen(f_lob, dbms_lob.file_readonly); 
    dbms_lob.loadfromfile( b_lob, f_lob, dbms_lob.getlength(f_lob) ); 
    dbms_lob.fileclose(f_lob); 
    COMMIT; 
    END; 
    /
    Etape 4:
    Plus qu'a executer la procédure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    BEGIN
    insert_img;
    END;
    /
    Voila et normalement celle méthode marche sans pb (perso je l'ai teste et il m'a bien inserer le blob.

    Par contre si ca marche toujours pas et qu'il sort une erreur de type ORA-22285 alors je te conseille de faire un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GRANT READ ON DIRECTORY MY_DIR TO <TON USER>;
    afin de lui donner les droits en écriture.

  10. #10
    Yaz
    Yaz est déconnecté
    Nouveau membre du Club
    Inscrit en
    Avril 2002
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 56
    Points : 36
    Points
    36
    Par défaut
    Merci je vais le tester tout de suite

  11. #11
    Yaz
    Yaz est déconnecté
    Nouveau membre du Club
    Inscrit en
    Avril 2002
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 56
    Points : 36
    Points
    36
    Par défaut
    ta première méthode fonctionne avec quelques petites modifications:

    abfile BFILE := bfilename('PAPER', v_name); v_name pas entre quotes
    dbms_lob.close(ablob); ajouter
    commit; avant le END

    encore

  12. #12
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Points : 1 326
    Points
    1 326
    Par défaut
    Oki je modifie mon poste pour eviter le pb aux prochains lecteurs.

  13. #13
    Membre à l'essai
    Inscrit en
    Mai 2003
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 17
    Points : 12
    Points
    12
    Par défaut extraction
    Bonjour

    j'ai utiliser votre méthode (la derniere) pour stocker des fichiers word dans la base (oracle) et ca marche
    mais je voudrai savoir comment on fait pour extraire ces document pour les modifier et les restocker apres dans la base


    Merci

  14. #14
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Points : 1 326
    Points
    1 326
    Par défaut
    Alors tout va dependre de la version d'oracle sur laquelle tu travailles.

    En 9i R2 tu peut utiliser UTL_FILE (pour stocker le blob dans ton fichier)
    En 9i R1 et avant tu devra utiliser du java pour pouvoir stocker ton blob dans un fichier.

    Ensuite tu le modifies, puis tu effaces le blob de la table et tu remet le tien à la place.

  15. #15
    Membre à l'essai
    Inscrit en
    Mai 2003
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    salut

    j'utilise oracle 8i

    il n'y a pas un moyen plus simple que java

    Merci

  16. #16
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Points : 1 326
    Points
    1 326
    Par défaut
    Arf a priori non (en tout cas pas dans les docs que j'ai trouvé.

    Tiens je te colle le lien pour que tu ailles jetter un coup d'oeil.

    http://asktom.oracle.com/pls/ask/f?p...6379798216275,

  17. #17
    Membre à l'essai
    Inscrit en
    Mai 2003
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 17
    Points : 12
    Points
    12
    Par défaut
    Merci

  18. #18
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Bonjour tout le monde,

    Ex-DBA SQL , je suis maintenant positionné sur un poste de DBA oracle, eh oui comme quoi !

    Pouvez-vous m'indiquer la meilleure solution ?

    Je dois creer sous Oracle9i un index de fichiers images qui se trouvent physiquement sur un serveur windows et afficher les images dans une page web

    1/ faut-il les inserer dans la base oracle et comment ?

    2/ comment acceder au web sous Oracle9

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

Discussions similaires

  1. Oracle 8i : insertion d'une image dans un BLOB
    Par garfield_fr dans le forum SQL
    Réponses: 0
    Dernier message: 02/12/2010, 14h04
  2. Insertion d'un fichier dans un BLOB qui ne marche pas
    Par Invité dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 15/11/2007, 19h57
  3. Proleme avec les dates dans mes requete sur oracle
    Par Aboubacry dans le forum SQL
    Réponses: 1
    Dernier message: 28/05/2007, 01h46
  4. taille max d'une photo jpg dans un champ blob de mysql
    Par zidenne dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 04/10/2006, 09h42
  5. Recherche de texte dans un blob sous oracle
    Par nesbla dans le forum Bases de données
    Réponses: 5
    Dernier message: 25/05/2004, 11h11

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