Oracle accesses files on the server by using a directory.
A directory is just a pointer to an operating system folder.
Assuming that a folder C:\IO exists on your server, and you want to call that folder IO within Oracle:
create directory IO as 'C:\IO';
grant read, write on directory IO to public;
Now, when you refer to IO in any commands, you're referring to the C:\IO folder in the file system.
To create a pointer to the file on the server and place that pointer in the table on an existing record
SQL> --1: Creating a Pointer
SQL>
SQL> create table catalog
2 (id number,
3 name VARCHAR2(2000),
4 manual_cl CLOB,
5 firstpage_bl BLOB,
6 mastertxt_bf BFILE
7 );
Table created.
SQL>
SQL> create directory IO as 'C:\IO';
Directory created.
SQL> --grant read, write on directory IO to public;
SQL>
SQL>
SQL> declare
2 v_bf BFILE;
3 begin
4 v_bf:=BFILENAME ('IO', 'text.htm');
5 insert into catalog(id, name, mastertxt_bf) values (1, 'TEXT.HTM', v_bf);
6 end;
7 /
PL/SQL procedure successfully completed.
SQL>
SQL> drop table catalog;
Table dropped.