当前所在位置:珠峰网资料 >> 计算机 >> Oracle认证 >> 正文
Oracle读写文件bfilename
发布时间:2010/12/8 10:04:37 来源:城市学习网 编辑:ziteng

  Create directory让我们可以在Oracle数据库中灵活的对文件进行读写操作,极大的提高了Oracle的易用性和可扩展性。

  其语法为:

  CREATE [OR REPLACE] DIRECTORY directory AS 'pathname';

  本案例具体创建如下:

  create or replace directory exp_dir as '/tmp';

  目录创建以后,就可以把读写权限授予特定用户,具体语法如下:

  GRANT READ[,WRITE] ON DIRECTORY directory TO username;

  例如:

  grant read, write on directory exp_dir to eygle;

  此时用户eygle就拥有了对该目录的读写权限。

  让我们看一个简单的测试:

  SQL> create or replace directory UTL_FILE_DIR as '/opt/oracle/utl_file';Directory created.

  SQL> declare

  2    fhandle utl_file.file_type;

  3  begin

  4    fhandle := utl_file.fopen('UTL_FILE_DIR', 'example.txt', 'w');

  5    utl_file.put_line(fhandle , 'eygle test write one');

  6    utl_file.put_line(fhandle , 'eygle test write two');

  7    utl_file.fclose(fhandle);

  8  end;

  9  /

  PL/SQL procedure successfully completed.

  SQL> !

  [oracle@jumper 9.2.0]$ more /opt/oracle/utl_file/example.txt eygle test
write oneeygle test write two[oracle@jumper 9.2.0]$

  类似的我们可以通过utl_file来读取文件:

  SQL> declare

  2    fhandle   utl_file.file_type;

  3    fp_buffer varchar2(4000);

  4  begin

  5    fhandle := utl_file.fopen ('UTL_FILE_DIR','example.txt', 'R');

  6

  7    utl_file.get_line (fhandle , fp_buffer );

  8    dbms_output.put_line(fp_buffer );

  9    utl_file.get_line (fhandle , fp_buffer );

  10    dbms_output.put_line(fp_buffer );

  11    utl_file.fclose(fhandle);

  12  end;

  13  /

  eygle test write one

  eygle test write two

  PL/SQL procedure successfully completed.

  可以查询dba_directories查看所有directory.

  SQL> select * from dba_directories;

  OWNER                          DIRECTORY_NAME                 DIRECTORY_PATH

  ------------------------------ ------------------------------ ------------------------------

  SYS                            UTL_FILE_DIR                   /opt/oracle/utl_fileSYS

  BDUMP_DIR                      /opt/oracle/admin/conner/bdumpSYS                                                         EXP_DIR                        /opt/oracle/utl_file

  可以使用drop directory删除这些路径.

  SQL> drop directory exp_dir;

  Directory dropped

  SQL> select * from dba_directories;

  OWNER                          DIRECTORY_NAME                 DIRECTORY_PATH

  ------------------------------ ------------------------------ ------------------------------

  SYS                            UTL_FILE_DIR                   /opt/oracle/utl_fileSYS

  BDUMP_DIR                      /opt/oracle/admin/conner/bdump

  create or replace directory USER_DIR as 'E:\PLSQL\310\';

  DECLARE

  v_content VARCHAR2(1800);

  v_bfile BFILE;

  amount INT;

  offset INT :=1;

  BEGIN

  v_bfile := bfilename('USER_DIR','test.TXT'); -- 注意这里的 User_dir 对应上面已经创建好啦的目录

  amount :=DBMS_LOB.getlength(v_bfile);

  DBMS_LOB.OPEN(v_bfile);

  DBMS_LOB.READ(v_bfile,amount,offset,v_content);

  DBMS_LOB.close(v_bfile);

  DBMS_OUTPUT.PUT_LINE(v_content);

  END;

广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved