转自:http://blog.csdn.net/alex197963/article/details/2030204
第一步:以管理员用户登陆
如: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;
end if;
v_totalinserted:=0;
/*open specified file*/
v_filehandle:=utl_file.fopen(p_path,p_filename,'r');
loop
begin
utl_file.get_line(v_filehandle,v_text);
exception
when no_data_found then
exit;
end ;
v_firstlocation:=instr(v_text,',',1,1);
v_secondlocation:=instr(v_text,',',1,2);
v_name:=substr(v_text,1,v_firstlocation-1);
v_addr_jd:=substr(v_text,v_firstlocation+1,v_secondlocation-v_firstlocation-1);
v_region:=substr(v_text,v_secondlocation+1);
/*插入数据库操作*/
insert into test_loadfile
values (v_name,v_addr_jd,v_region);
commit;
end loop;
<<to_end>>
null;
end loadfiledata;
可以不用在init.ora中改的
只要用管理员的权限登陆,执行:
create directory UTL_FILE_TEST as '/*'
应该就可以了,不用新启动oracle的
不过其他用户要使用此目录要授权的
/
grant create any directory to scott;
grant create any library to scott;
create or replace directory utllobdir as 'C:/ep';
在initsid.ora文件中,加入或修改
设置utl_file_dir的要点:
1。 utl_file_dir=* 这表示你能操作任何目录,尽量不要用
2。 utl_file_dir=d:/ 这表示你能操作d:/目录下的文件,但你不能操作d:/目录下的子目录
3。注意在设置
utl_file_dir=路径时,如果路径是长路径名,例如c:/my temp目录,则你必须加上'',例如:
utl_file_dir='c:/my temp'
4。utl_file_dir可以是多个路径
utl_file_dir=c:/,d:/,d:/temp,'c:/my temp'
5。设置完必须重新启动数据库
发表评论
-
大数据量转存(抽取、同步)
2012-11-22 01:23 715在大数据量的转存过程中,建议使用分批转存(不要一次转存过来 ... -
Oracle数据库优化要点总结
2012-10-22 10:33 711当oracle出现性能缓慢、 ... -
反向索引之应用
2012-10-19 15:54 765Oracle会自动为表的 ... -
PFILE与SPFILE差异
2012-10-17 11:56 7911.oracle实例启动时,寻找参数文件的顺序为 spf ... -
Oracle 分区简述
2012-10-12 12:01 689oracle8i起开始推出表分区的概念,最初只有范围分区、列表 ... -
Bitmap位图索引"高昂代价"与B-Tree比较
2012-10-10 08:54 690通过以下实验,来验证B ... -
关于Latch与Spin
2012-10-10 08:51 793latch 是一种轻量级用于保护oracle共享内存结构,用 ... -
RAID的类别使用(0,1,0+1,5)
2012-10-08 09:02 736raid0: 熟悉RAID 0的人都知道,它的读写速度是最高 ... -
oracle 裸设备使用和注解
2012-09-28 11:37 950看了一篇不错的的关于 ... -
EM无法登陆问题
2012-05-19 22:20 1285解决ORACLE的EM登录 这几 ... -
oracle的冷/热备份
2012-04-29 11:48 736一、 冷备份 冷 ... -
oracle安装、编译、参数配置
2011-06-09 19:23 700一、安装 按照以下标 ... -
Oracle个人笔记(SQL性能)2B
2011-06-09 19:20 6901.两者区别在哪?select trunc(sysdate,' ... -
start with...connect by prior用法
2011-06-09 19:18 679--当需要根据递归关系查询结果集时 start wit ... -
ORA-01157(表空间数据文件损坏需重建时)
2011-06-09 19:08 1032EM控制台报错如下: 处理步骤: 1. 备份该数据 ... -
工作积累(游标、权限、数组)2
2011-06-09 19:04 691--游标 一、显式游标通 ... -
工作积累(表空间、导出方案、触发器)1
2011-06-09 19:01 682--查看表空间、数据文件相关信息 1、查看表空间包含哪些数据 ... -
Oracle个人笔记(系统查询语句)3
2011-06-09 18:55 563查询锁的表的方法:(1 ... -
Oracle个人笔记(SQL性能)2A
2011-06-09 18:54 7371. ...group by (code,name); 性能要 ... -
Oracle个人笔记(基本规则)1
2011-06-09 18:52 6401.GRANT 权限 ON 表名(对象名) TO 用户;2.o ...
相关推荐
Oracle学习]ORACLE的UTL_FILE包简析 包UTL_FIle用于读写操作系统的文件,前提是首先创建Directory对象、授权。然后就可以使用UTL_FILE包中提供的类型、过程、函数来读取
然而,使用`UTL_FILE`包前,需确保数据库用户拥有足够的操作系统权限,并且在`init.ora`文件中正确配置了`UTL_FILE_DIR`参数。 #### 创建文件目录 在使用`UTL_FILE`之前,必须首先创建一个数据库目录对象。这可以...
`FUNCTION UTL_FILE.GET_LINE (file IN UTL_FILE.FILE_TYPE, line OUT VARCHAR2) RETURN BOOLEAN;` 其中,file 是文件句柄,line 是读取的行内容。如果读取成功,返回 TRUE,否则 FALSE。 其他 UTL_FILE 函数 ----...
如果路径和文件名均合法,则该文件被打开到一个 file_type 中,然后可以进行各种操作,最后使用 FCLOSE 函数将其关闭。 UTL_FILE 包提供了多种操作,包括读取文件、写入文件、删除文件、重命名文件等。同时,UTL_...
在Oracle 9i数据库系统中,`UTL_FILE_DIR`参数是用于控制PL/SQL程序在执行时可以访问的文件目录的重要配置项。这个参数的设置对于实现数据的读写操作、日志记录以及与其他文件系统的交互至关重要。下面将详细探讨...
这段代码展示了如何使用Oracle的UTL_FILE包来处理文件的读写操作,并且能够将文件内容存储到数据库的BLOB字段中。下面将对各个部分进行详细解读。 ### UTL_FILE简介 UTL_FILE是Oracle提供的一个用于文件I/O操作的...
在这个例子中,我们首先声明了一个UTL_FILE.FILE_TYPE类型的变量`l_file`来代表文件句柄。接着,我们调用`UTL_FILE.FOPEN`函数打开或创建文件,参数分别为目录对象名、文件名、打开模式('W'表示写入,如果文件存在...
总的来说,Oracle的UTL_FILE包为开发者提供了一套完整的文件操作接口,可以在数据库环境中方便地处理文本文件,进行读写、复制、重命名和删除等操作。理解并熟练使用UTL_FILE,能够极大地提升数据库管理的效率,尤其...
现在建议使用`CREATE DIRECTORY`特性来替代`UTL_FILE_DIR`,这不仅提供了更多的灵活性和细粒度控制,还与Oracle的其他工具保持一致,且可以在不停机的情况下动态维护。 #### 文件所有权与保护 在UNIX系统上,由`...
可以使用PL/SQL的文件I/O函数,如`UTL_FILE.GET_LINE`或`UTL_FILE.READ`,来读取文件内容,然后用`UTL_TCP.WRITE_LINE`或`UTL_TCP.WRITE_RAW`将其写入网络连接。 文件传输完成后,记得关闭连接以释放资源: ```sql...
### UTL_MAIL与Oracle Scheduler详解 #### UTL_MAIL:Oracle中的邮件发送工具 UTL_MAIL是Oracle提供的一个用于发送电子邮件的内置程序包。通过UTL_MAIL,开发人员可以在Oracle环境中轻松实现邮件通知功能,这对于...
ai_LocalFilename in out Nocopy UTL_File.File_Type, as_TransferMethod in VarChar2 Default Null ); Procedure p_GetFileList( ac_Connection in out Nocopy Connection, afl_List out ...
如果Oracle用户没有对`UTL_FILE_DIR`指定的目录的访问权限,那么UTL_FILE包将无法访问这些目录,操作系统会阻止相应的读写操作。此外,尽管某些操作系统不区分大小写,但在UTL_FILE包中指定的目录与初始化参数文件中...
Oracle数据库的UTL_FILE包是一个内置的PL/SQL包,它允许数据库直接访问和操作服务器端的磁盘文件,从而实现数据库与文件系统的交互。这个包提供了一系列过程和函数,如`popen`、`flush`、`put`、`put_line`、`get_...
UTL_FTP是Oracle数据库内置的一个PL/SQL软件包,专为在数据库环境中执行FTP(File Transfer Protocol)任务而设计。这个包允许开发者无需离开Oracle环境就能与远程服务器进行文件的上传、下载以及管理,极大地简化了...
utl_file_and_directory_utilities_for_all_operating_systems 关键字:sas sql join合并大数据分析宏oracle teradata mysql sas社区stackoverflow statistics人工智慧AI Python R Java Javascript WPS Matlab SPSS ...
Type File_List is Table of Clob; --文件变成流 Function f_File2Blob( as_SubDir in VarChar2, as_FileName in VarChar2 )Return Blob; --获取压缩流的文件清单 Function f_GetFileList( ...