Bonjour,
Dans le but d'insérer un champ BLOB ainsi que de le lire (SELECT), je connais grâce à l'article d'Helyos (http://helyos.developpez.com/lob/) que l'on peut pas faire un INSERT basique sur un blob et de même pour le select !!
J'ai alors essayé l'exemple d'Helyos (partie BLOBs)
Tout est OK jusque là mais lorsqu'on teste enfin la procédure du package:
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
31
32
33
34
35
36
37 CONNECT system / < pass > CREATE directory blobdir AS 'c:\temp\'; GRANT READ ON directory blobdir TO scott; CREATE TABLE scott.t_blob (id number, image blob); CREATE OR REPLACE PACKAGE scott.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); END sql_blob; / CREATE OR REPLACE PACKAGE BODY scott.sql_blob IS PROCEDURE add_blob(p_id NUMBER, p_name 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 => 'BLOBDIR', filename => p_name); -- On ouvre ce fichier dbms_lob.fileopen(v_bfile); -- On rempli l'emplacement du BLOB vide dans la table avec le contenu de notre fichier dbms_lob.loadfromfile(v_blob, v_bfile, dbms_lob.getlength(v_bfile)); -- On ferme le fichier dbms_lob.fileclose(v_bfile); END; END sql_blob; /
De mêmeexec sql_blob.add_blob(1,'toto.bmp');
L'erreur est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part exec scott.sql_blob.add_blob(1,'C:\temp\toto.bmp');
ERREUR à la ligne 1 :
ORA-22288: échec de l'opéation FILEOPEN sur le fichier ou le LOB
Le fichier spécifié est introuvable.
ORA-06512: à "SYS.DBMS_LOB", ligne 504
ORA-06512: à "SCOTT_BLOB", ligne 15
ORA-06512: à ligne 1
Or, ce fichier toto.bmp existe bel et bien
Partager