Skip to main content

Filesystem

Il package DBMS_FILE_TRANSFER mette a disposizione procedure per copiare file binary all'interno di un database o rta database diversi. Per esempio:

  1. Copia file da una source directory all' altra. Le due directory possono essere entrambe sul filesystem locale, oppure entrambe nell Automatic Storage Management (ASM) disk group, o anche essere in situazioni miste in entrambe le direzioni.
  2. Si sollega ad un db remoto e legge un file remoto creandone una copia sul filesystem o ASM locali
  3. Legge il filesystem locale o ASM e si collega ad un database remoto per crearvi una copia del file

NB. Non lavora sul DB nel senso stretto del termine, vale a dire su colonne LOB o CLOB.

Questo è un esempio:

procedure load_attachment(dir in varchar2, nam in varchar2) is
 fl BFILE;
 att blob;
 begin
 Dbms_Lob.createtemporary(att, TRUE, Dbms_Lob.CALL); 
 fl := BFileName(dir, nam);
 if (dbms_lob.fileexists(fl) = 1) then
 
 Dbms_Lob.fileopen(fl, Dbms_Lob.LOB_READONLY);
 Dbms_Lob.loadfromfile(att, fl, Dbms_Lob.getlength(fl));
 Dbms_Lob.fileclose(fl);

....
 else
 dbms_output.put_line('File doesn't exists!');
 end if;  
 end;

Se ottenete l' errore Oracle ORA-22275 - invalid LOB locator specified, forse avete dimenticato l' istruzione Dbms_Lob.createtemporary.

Here's a code example:

procedure load_attachment(dir in varchar2, nam in varchar2) is
fl BFILE;
att blob;
begin
Dbms_Lob.createtemporary(att, TRUE, Dbms_Lob.CALL);
fl := BFileName(dir, nam);
if (dbms_lob.fileexists(fl) = 1) then

Dbms_Lob.fileopen(fl, Dbms_Lob.LOB_READONLY);
Dbms_Lob.loadfromfile(att, fl, Dbms_Lob.getlength(fl));
Dbms_Lob.fileclose(fl);

....
else
dbms_output.put_line('File doesn't exists!');
end if;  
end;

If you get Oracle error ORA-22275 - invalid LOB locator specified, maybe you forgot the Dbms_Lob.createtemporary instruction.