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)
ma procedure compile sans problème.
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); ...
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);et si j'essaie directement de lui mettre l'adresse du dossier, sans passer par l'objet DIRECTORY, ça plante également :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:
Code : Sélectionner tout - Visualiser dans une fenêtre à part execute sql_blob.add_blob(1,'test.tar.gz', '/var/tmp/');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.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.
Je ne sais pas trop comment gérer ce problème. Si vous aviez des pistes à me donner, je vous remercie d'avance.
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 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
Partager