Stored Procedure Function Oracle PLSQL

SQL>
SQL> create or replace procedure file_dump( p_directory in varchar2,p_filename  in varchar2 )
  2  as
  3      type array is table of varchar2(5) index by binary_integer;
  4
  5      l_chars  array;
  6      l_bfile  bfile;
  7      l_buffsize number default 15;
  8      l_data   varchar2(30);
  9      l_len    number;
 10      l_offset number default 1;
 11      l_char   char(1);
 12  begin
 13      l_chars(0)  := '\0';
 14      l_chars(13) := '\r';
 15      l_chars(10) := '\n';
 16      l_chars(9)  := '\t';
 17
 18      l_bfile := bfilename( p_directory, p_filename );
 19      dbms_lob.fileopen( l_bfile );
 20
 21      l_len := dbms_lob.getlength( l_bfile );
 22      while( l_offset < l_len )
 23      loop
 24          l_data := utl_raw.cast_to_varchar2(dbms_lob.substr( l_bfile, l_buffsize, l_offset ));
 25
 26          for i in 1 .. length(l_data)
 27          loop
 28              l_char := substr(l_data,i,1);
 29
 30              if ascii( l_char ) between 32 and 126
 31              then
 32                  dbms_output.put( lpad(l_char,3) );
 33              elsif ( l_chars.exists( ascii(l_char) ) )
 34              then
 35                  dbms_output.put( lpad( l_chars(ascii(l_char)), 3 ) );
 36              else
 37                  dbms_output.put( to_char(ascii(l_char),'0X') );
 38              end if;
 39          end loop;
 40          dbms_output.new_line;
 41
 42          l_offset := l_offset + l_buffsize;
 43      end loop;
 44      dbms_lob.close( l_bfile );
 45  end;
 46  /
Procedure created.
SQL>
SQL>
SQL> exec file_dump( 'MY_FILES', 'demo17.dat' );
BEGIN file_dump( 'MY_FILES', 'demo17.dat' ); END;
*
ERROR at line 1:
ORA-22285: non-existent directory or file for
FILEOPEN operation
ORA-06512: at "SYS.DBMS_LOB", line 523
ORA-06512: at "RNTSOFT.FILE_DUMP", line 19
ORA-06512: at line 1
SQL>
SQL> --