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 :

Problème d'execution d'un procedure avec un objet directory en paramètre


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Inscrit en
    Juin 2003
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 55
    Points : 41
    Points
    41
    Par défaut Problème d'execution d'un procedure avec un objet directory en paramètre
    Bonjour,

    Je dois faire un script qui doit me permette d'inserer un fichier dans champ Blob. Après quelque recherche sur internet, je suis tombée sur ça : http://helyos.developpez.com/lob/#L2.2, qui correspond exactement à ce que je souhaite faire. J'ai fait un premier test avec la procédure telle quelle, en créant le dossier blobdir et en lui attribuant les bons droits.
    Tout fonctionne correctement ^^... Le problème, c'est que je voudrais pouvoir paramétrer cette procédure avec deux autres données : le dossier dans lequel se trouvera mon fichier à inserer dans le blob, ainsi que la table d'insertion.

    j'ai donc fait une première modification de ma procedure pour qu'il prenne un paramètre de plus (le dossier dans lequel est stocké mon fichier à inserer dans le blob)

    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
    CREATE OR REPLACE PACKAGE sql_blob IS
     
      -- Procédure servant à ajouter un BLOB à notre table.
      -- p_id correspond à l'id
      -- p_name correspond au nom du fichier à inserer.
      PROCEDURE add_blob(p_id NUMBER, p_name VARCHAR2, direct VARCHAR2);
     
    END sql_blob;
    /
    CREATE OR REPLACE PACKAGE BODY sql_blob IS
     
      PROCEDURE add_blob(p_id NUMBER, p_name VARCHAR2, direct VARCHAR2) IS
        v_blob  BLOB;
        v_bfile BFILE;
      BEGIN
        -- On insére la ligne avec un blob vide dont on récupère le pointeur
        INSERT INTO t_blob
        VALUES
          (p_id, empty_blob())
        RETURNING image INTO v_blob;
        -- On déclare un pointeur vers notre fichier
        v_bfile := bfilename(directory => direct, filename => p_name);
        ...
    ma procedure compile sans problème.

    Par contre, lorsque j'essaie de l'executer, ça coince.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    execute sql_blob.add_blob(1,'test.tar.gz', blobdir);
    Error starting at line 1 in command:
    execute sql_blob.add_blob(1,'test.tar.gz', blobdir);
    Error report:
    ORA-06550: line 1, column 51:
    PLS-00201: identifier 'BLOBDIR' must be declared
    ORA-06550: line 1, column 7:
    PL/SQL: Statement ignored
    06550. 00000 - "line %s, column %s:\n%s"
    *Cause: Usually a PL/SQL compilation error.
    *Action:
    et si j'essaie directement de lui mettre l'adresse du dossier, sans passer par l'objet DIRECTORY, ça plante également :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    execute sql_blob.add_blob(1,'test.tar.gz', '/var/tmp/');
    Error starting at line 1 in command:
    execute sql_blob.add_blob(1,'test.tar.gz', '/var/tmp');
    Error report:
    ORA-22285: non-existent directory or file for FILEOPEN operation
    ORA-06512: at "SYS.DBMS_LOB", line 504
    ORA-06512: at "SQL_BLOB", line 15
    ORA-06512: at line 1
    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.
    Et cela, quelque soit l'utilisateur avec lequel je me connecte (j'ai préféré en tester plusieurs, des fois que...) : 'system' ou l'utilisateur (mon_user) auquel j'ai attribué les droits de lecture lorsque j'ai créé mon repertoire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE directory blobdir AS '/var/tmp/';
    GRANT READ ON directory blobdir TO mon_user;
    Je ne sais pas trop comment gérer ce problème. Si vous aviez des pistes à me donner, je vous remercie d'avance.

    Je précise également que je suis ultradébutante en pl/sql, donc merci d'etre indulgent si j'ai raconté/fais des bétises jusqu'à présent.

    Merci

  2. #2
    Membre chevronné Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Points : 2 071
    Points
    2 071
    Par défaut
    Quelle version d'Oracle ?
    A priori, la première facon est la bonne
    Mais tu dois passer ton nom de DIRECTORY en variable chaine!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    execute sql_blob.add_blob(1,'test.tar.gz', 'blobdir');
    Garuda गरूड
    Brahmâ la Guerre et Vishnu la Paix

    Oracle 12C R2 - Forms11GR2 - Toad 12 - sharePoint 2010

  3. #3
    Membre du Club
    Inscrit en
    Juin 2003
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 55
    Points : 41
    Points
    41
    Par défaut
    ma version de oracle est 9.2.0.5.0

    Merci Garuda pour ta solution, c'est la bonne ^^

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/10/2010, 21h48
  2. Réponses: 7
    Dernier message: 16/10/2008, 17h19
  3. Réponses: 1
    Dernier message: 29/09/2006, 10h43
  4. problème d'execution d'une procedure
    Par new_wave dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 12/08/2006, 13h27
  5. Execution d'une procedure avec TNotifyEvent;
    Par Chupakabra dans le forum Langage
    Réponses: 2
    Dernier message: 30/01/2003, 14h50

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