Créer un directory sur son PC et non pas sur le serveur Oracle
Bonjour les forumeurs,
J'ai le souci suivant : je veux insérer un document word dans une colonne de type BLOB mais ce document se trouve sur mon PC.
J'ai créé un directory dans ma base mais ce directory pointe vers un répertoire client (donc de mon PC) et non pas vers un répertoire du serveur Oracle car je n'ai pas accès au serveur Unix.
Code:
1 2 3
| CREATE TABLE TEST_DD_BLOB ( TEST_DD_BLOB_ID NUMBER NOT NULL, TEST_DD_BLOB_NAME BLOB, CONSTRAINT PK_TEST_DD_BLOB PRIMARY KEY(TEST_DD_BLOB_ID));
create or replace directory TEST_DD_DIRECTORY as 'P:\'; |
Là où ça coince c'est dans mon programme PL/SQL et sur la fonction dbms_lob.fileopen car Oracle me dit .
Code:
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
| DECLARE
l_blob blob;
l_bfile bfile;
procedure load_a_file( p_id in number, p_filename in varchar2 )
IS
begin
insert into TEST_DD_BLOB values ( p_id, empty_blob() )
returning TEST_DD_BLOB_NAME into l_blob;
l_bfile := bfilename( 'TEST_DD_DIRECTORY', p_filename );
dbms_lob.fileopen( l_bfile, dbms_lob.file_readonly );
dbms_lob.loadfromfile( l_blob, l_bfile, dbms_lob.getlength( l_bfile ) );
dbms_lob.fileclose( l_bfile );
end;
BEGIN
load_a_file(1, 'TEST_Blob_Oracle_DBlink.docx');
END;
/
ORA-22288: échec de l'opération FILEOPEN sur le fichier ou le LOB
No such file or directory
ORA-06512: à "SYS.DBMS_LOB", ligne 805
ORA-06512: à ligne 11
ORA-06512: à ligne 17 |
En cherchant sur le net j'ai compris que le directory créé DEVAIT être sur le serveur Oracle.
Problème : je n'ai pas accès au serveur Unix et c'est beaucoup trop lourd d'un point de vue procédure de déranger les gens ayant cet accès pour leur demander de m'aider dans mes tests qui sont tout sauf prioritaires pour eux :aie:
Existe-t-il un moyen de contourner cette obligation? Par avance merci pour vos réponses.
Créer un directory sur son PC et non pas sur le serveur Oracle
Voilà ce que je te propose :
- vérifier bien que tu as définies les privileges acces sur l'objet directory càd
Code:
grant read, write on nom_directory to public ;
- Est-ce que le poste client a un OS windows, si telle est le cas, sur le serveur unix
il doit un avoir une fonctionnalité sur les correspondances des chemins d'accès aux
répertoir entre unix et windows ??
- Verifier bien si le repertoire P:\ existe bien sur le poste client
- revoir ton code de ta procedure, manque t-il qqchoses ???
Créer un directory sur son PC et non pas sur le serveur Oracle
Est-ce que ceci : load_a_file(1, 'TEST_Blob_Oracle_DBlink.docx'),
devait-il pas s'écrire load_a_file(1, 'P:\TEST_Blob_Oracle_DBlink.docx') ?
A propos de la fonctionnalité, voir la réponse de Garuda (serveur samba sous unix) .