zoukankan      html  css  js  c++  java
  • Oracle 读写文件 bfilename [实例]

    Oracle 读写文件 bfilename [实例]
    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;

             

                成长

           /      |     \

        学习   总结   分享

    QQ交流群:122230156

  • 相关阅读:
    c博客作业05--指针
    C博客作业04--数组
    C博客作业03--函数
    C博客作业02--循环结构
    C博客作业01--分支、顺序结构
    我的第一篇博客
    DS博客作业05--查找
    DS博客作业04--图
    DS博客作业03--树
    DS博客作业02--栈和队列
  • 原文地址:https://www.cnblogs.com/benio/p/1895429.html
Copyright © 2011-2022 走看看