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 :

problème avec blob et dbms_lob.fileopen(bfile) [11g]


Sujet :

PL/SQL Oracle

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2014
    Messages : 14
    Points : 16
    Points
    16
    Par défaut problème avec blob et dbms_lob.fileopen(bfile)
    bonjour,

    s'il vous plait, j'ai réaliser une procédure stockée qui doit insérer dans une table un champ de type blob.

    ----> Création de la table "livres" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CREATE TABLE livres (
    id number primary key,
    fichier varchar2(64),
    contenu blob
    );
    ----> Création du répertoire logique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CREATE DIRECTORY rep_logic AS 'C:\log_rep';
    -- le dossier 'C:\log_rep' existe, et il contient un fichier "demande.txt".
    ----> Création de la procédure insérer_livre(id_liv, fichier)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    CREATE OR REPLACE PROCEDURE inserer_livre(id_liv livres.id%TYPE, fichier livres.fichier%TYPE) AS
      cont BLOB;
      src BFILE := bfilename('rep_logic', fichier);
    BEGIN
      DBMS_LOB.fileopen(src, DBMS_LOB.file_readonly);
      INSERT INTO livres VALUES(id_liv, fichier, empty_blob()) RETURN contenu INTO cont;
      DBMS_LOB.loadfromfile(cont, src, DBMS_LOB.getlength(src),1,1);
      DBMS_LOB.fileclose(src);
      COMMIT;
    END inserer_livre;
    la table livres, le répertoire logique et la procédure stockée inserer_livres(id, fichier) sont créer sans aucune erreur.
    le problème c'est que lorsque je lance la procédure il m’affiche une erreur :

    ---->Lancement du procédure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    begin 
      inserer_livre(1,'demande.txt');
    end;
    ----> erreur obtenu :
    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
     
    Error starting at line 1 in command:
    begin 
      inserer_livre(3,'demande.txt');
    end;
    Error report:
    ORA-22285: non-existent directory or file for FILEOPEN operation
    ORA-06512: at "SYS.DBMS_LOB", line 635
    ORA-06512: at "SYSTEM.INSERER_LIVRE", line 5
    ORA-06512: at line 2
    22285. 00000 -  "non-existent directory or file for %s operation"
    *Cause:    Attempted to access a directory that does not exist, or attempted
               to access a file in a directory that does not exist.
    *Action:   Ensure that a system object corresponding to the specified
               directory exists in the database dictionary, or
               make sure the name is correct.
    Même si que le répertoire existe ainsi que le fichier, je vois que le problème vient du FILEOPEN qui ne localise pas l'emplacement de mon fichier demande.txt.
    est ce que vous avez des suggestion pour moi ?

    merci d'avance.

  2. #2
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2014
    Messages : 14
    Points : 16
    Points
    16
    Par défaut
    bon pour les gens qui vient ici après moi. le problème c'est que le nom de répertoire logique doit être en majuscule comme suite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE OR REPLACE PROCEDURE inserer_livre(id_liv livres.id%TYPE, fichier livres.fichier%TYPE) AS
      cont BLOB;
      src BFILE := bfilename('REP_LOGIC', fichier);
    BEGIN
      DBMS_LOB.fileopen(src);
      INSERT INTO livres VALUES(id_liv, fichier, empty_blob());
      SELECT contenu INTO cont FROM livres WHERE id = id_liv FOR UPDATE;
      DBMS_LOB.loadfromfile(cont, src, DBMS_LOB.getlength(src),1,1);
      DBMS_LOB.fileclose(src);
      COMMIT;
    END inserer_livre;
    Ainsi si l'erreur vient du manque des permissions on exécute l'ordre suivant :
    GRANT READ ON DIRECTORY rep_logic TO PUBLIC;
    -- public ou à un seul utilisateur à vous de voir :p

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

Discussions similaires

  1. Problème Typage avec Blob
    Par mxh77 dans le forum 4D
    Réponses: 0
    Dernier message: 07/03/2008, 16h34
  2. Problème avec un Blob Image
    Par colorid dans le forum Bases de données
    Réponses: 6
    Dernier message: 10/12/2007, 10h54
  3. Problème avec BLOB
    Par identifiant_bidon dans le forum Langage SQL
    Réponses: 6
    Dernier message: 05/11/2007, 14h46
  4. Problème avec webutil et blob - WUT-121
    Par shaibi dans le forum Forms
    Réponses: 3
    Dernier message: 12/10/2006, 22h51
  5. Problème avec le type BLOB dans oracle
    Par pguedia dans le forum Oracle
    Réponses: 1
    Dernier message: 10/11/2005, 17h33

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