当前位置:数据库 > Oracle >>

oracle生成txt

oracle生成txt
 
CREATE or replace DIRECTORY READ_FILE_DIR AS 'D:\abc\'; -- 要手动创建abc目录 
select * from dba_directories; 
grant read,write on directory READ_FILE_DIR to PUBLIC; --当前用户给其他用户赋权限 
 
create or replace procedure lfz_utl_file_pro as 
l_file utl_file.file_type; 
cursor c_lifztest_analyse3 is select * from lifztest_analyse3; 
BEGIN 
  l_file := utl_file.fopen('READ_FILE_DIR', 'aaa.TXT', 'W');--READ_FILE_DIR要大写 'aaa.TXT' 自动创建 
 
  for r_c_lifztest_analyse3 in c_lifztest_analyse3 loop 
      utl_file.put_line(l_file,r_c_lifztest_analyse3.hphm1); 
  end loop; 
 
  utl_file.fclose(l_file); 
END; 
 
 
r -- read text 
w -- write text 
a -- append text 
rb -- read byte mode 
wb -- write byte mode 
ab -- append byte mode 
 
 
第一步:以管理员用户登陆   
   如:conn    sys/password@sid    as    sysdba   
   第二步:设置可操作目录   
   需要指定utl_file包可以操作的目录。在oracle    10g以前,可以用以下方法:   
   1、alter    system    set    utl_file_dir='e:/utl'    scope=spfile;   
   2、在init.ora文件中,配置如下:   
   UTL_FILE=E:/utl或者UTL_FILE_DIR=E:/utl   
   在oracle    10g中建议用以下方法配置:CREATE    DIRECTORY    utl    AS    'E:/utl';   
   参见oracle    online:   
   In    the    past,    accessible    directories    for    the    UTL_FILE    functions    were    specified    in    the    initialization    file    using    the    UTL_FILE_DIR    parameter.    However,    UTL_FILE_DIR    access    is    not    recommended.    It    is    recommended    that    you    use    the    CREATE    DIRECTORY    feature,    which    replaces    UTL_FILE_DIR.    Directory    objects    offer    more    flexibility    and    granular    control    to    the    UTL_FILE    application    administrator,    can    be    maintained    dynamically    (that    is,    without    shutting    down    the    database),    and    are    consistent    with    other    Oracle    tools.    CREATE    DIRECTORY    privilege    is    granted    only    to    SYS    and    SYSTEM    by    default.   
    
   第三步:授权给指定用户,以便执行utl_file   
   GRANT    EXECUTE    ON    utl_file    TO    scott;   
    
   第四步:conn    scott/tiger   
   就可以正常使用utl_file了。     
    
    
    
    
   摘要:本文主要讨论如何利用Oracle的UTL_FILE包来实现对磁盘文件的I/O操作。   
    
     文件I/O对于数据库的开发来说显得很重要,比如如果数据库中的一部分数据来自于磁盘文件,   
           那么就需要使用I/O接口把数据导入到数据库中来。在    PL/SQL中没有直接的I/O接口,   
           一般在调试程序时可以使用Oracle自带的DBMS_OUTPUT包的put_line函数(即向屏幕进行I/O    操作)即可,   
         但是对于磁盘文件的I/O操作它就无能为力了。其实Oracle同样也提供了可以进行文件I/O的实用包-----UTL_FILE包,   
         利用这个实用包提供的函数来实现对磁盘的I/O操作。   
    
     1.    准备工作   
    
     由于Oracle数据库对包创建的目录有一个安全管理的问题,所以并不是所有的文件目录能够被UTL_FILE包所访问,   
           要更新这种目录设置,就得到init.ora里将UTL_FILE_DIR域设置为*,这样UTL_FILE包就可以对所有的目录文件进行访问了。   
    
     2.    文件I/O的实施   
    
     UTL_FILE包提供了很多实用的函数来进行I/O操作,主要有以下几个函数:   
    
     fopen   
    
     打开指定的目录路径的文件。   
    
     get_line   
    
     获取指定文件的一行的文本。   
    
     put_line   
    
     向指定的文件写入一行文本。   
    
     fclose   
    
     关闭指定的文件。   
    
     下面利用这些函数,实现从文件取数据,然后将数据写入到相应的数据库中。   
    
   create    or    replace    procedure    loadfiledata(p_path    varchar2,p_filename    varchar2)    as   
   v_filehandle    utl_file.file_type;    --定义一个文件句柄   
   v_text    varchar2(100);    --存放文本   
   v_name    test_loadfile.name%type;   
   v_addr_jd    test_loadfile.addr_jd%type;   
   v_region    test_loadfile.region%type;   
   v_firstlocation    number;   
   v_secondlocation    number;   
   v_totalinserted    number;   
   begin   
   if    (p_path    is    null    or    p_filename    is    null)    then   
   goto    to_end;   
   
Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,