摘要:本文主要讨论如何利用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。设置完必须重新启动数据库
================================================
命令设置:
system@oracle9i as sysdba
user:system
pwd:******
数据库:oracle9i
连接为:sysdba
执行命令:
alter system set utl_file_dir='D:\exportDataTest' scope=spfile;
grant execute on utl_file to scott;
服务器关闭-重启
(
(1) 以oracle身份登录数据库,命令:su – oracle
(2) 进入Sqlplus控制台,命令:sqlplus /nolog
(3) 以系统管理员登录,命令:connect / as sysdba
(4) 启动数据库,命令:startup
(5) 如果是关闭数据库,命令:shutdown immediate
(6) 退出sqlplus控制台,命令:exit
(7) 进入监听器控制台,命令:lsnrctl
(8) 启动监听器,命令:start
(9) 退出监听器控制台,命令:exit
(10) 重启数据库结束
)
登陆scott,就可以用utl_file包对路径'D:\exportDataTest' 进行文件的输入输出操作
分享到:
相关推荐
尽管UTL_FILE的I/O能力类似于标准的操作系统流文件I/O(如OPEN、GET、PUT、CLOSE),但在服务器端实现时存在一些限制。 #### 安全性 UTL_FILE适用于客户端和服务器端的PL/SQL环境。客户端的实现遵循正常的操作系统...
Oracle数据库的UTL_FILE包是一个内置的PL/SQL包,它允许数据库直接访问和操作服务器端的磁盘文件,从而实现数据库与文件系统的交互。这个包提供了一系列过程和函数,如`popen`、`flush`、`put`、`put_line`、`get_...
Oracle数据库是一种广泛...总的来说,Oracle数据库的管理和调试涉及到多个层面,包括表空间的规划、数据存储结构的理解以及利用UTL_FILE包进行日志记录。掌握这些概念和技术对于有效管理和维护Oracle数据库至关重要。
UTL_FILE是Oracle提供的一个内建包,用于读写操作系统文件。在描述的示例中,它被用来创建一个简单的CSV格式的文件,模拟Excel文件。以下是使用UTL_FILE创建Excel文件的基本步骤: ```sql DECLARE l_file UTL_FILE...
需要注意的是,这种方法生成的XML文件是以文本形式输出的,如果需要XML文件以二进制格式存储,可以考虑其他方法,例如直接写入BFILE或通过PL/SQL的UTL_FILE包写入磁盘。 总的来说,Oracle的`dbms_xmlgen`包提供了一...
1. **Oracle的UTL_FILE包**:在PL/SQL中,可以使用UTL_FILE包来读取和写入文件,包括Excel文件。虽然UTL_FILE不直接支持Excel格式,但你可以先将Excel数据保存为CSV,然后通过这个包读取和写入。 2. **PL/SQL生成...
可以使用PL/SQL的UTL_FILE包或者在客户端工具中执行SQL语句,将BLOB数据写入到磁盘上指定的文件。 7. **文件命名**:根据描述中的"文件名数据列名",确保正确地为每个图片文件分配正确的文件名。 在上述过程中,`...
Oracle 数据库提供了很多置包:DBMS_OUTPUT、DBMS_SQL、DBMS_ALERT、DBMS_PIPE、DBMS_JOB、DBMS_LOB、DBMS_UTILITY、UTL_FILE、UTL_MAIL 和UTL_SMTP 等。使用了这些包的应用程序要想在 DB2 上运行,就需要在 DB2 中...
1. 首先在`init.ora`文件中指定UTL_FILE_DIR参数来设置临时目录。 ```sql UTL_FILE_DIR='...' ``` 2. 使用`DBMS_LOGMNR_D.BUILD`过程创建LogMiner会话。 ```sql EXECUTE DBMS_LOGMNR_D.BUILD('oradb.ora','c:...
在 Oracle 数据库管理中,强制日志切换是一项重要的维护活动,它可以帮助确保数据库日志文件的有效管理和循环利用。当发出 `ALTER SYSTEM SWITCH LOGFILE` 命令时,系统会将当前正在使用的重做日志文件组切换到下一...
首先需要在初始化参数文件中设置UTL_FILE_DIR参数,然后使用`dbms_logmnr`包的一系列函数来完成构建、添加日志文件、启动和结束LogMiner会话的过程。 #### 第二章:表空间管理 表空间是Oracle数据库中数据存储的...
5. **检查硬件和操作系统**:错误也可能源于硬件故障或操作系统层面的问题,所以检查存储设备、内存、磁盘I/O等也是必要的。 6. **升级和补丁**:确保数据库版本是最新的,并应用了所有相关的补丁。有时候,新的...
通常,我们会创建专用的文件系统用于Oracle数据库,并确保有足够的磁盘空间。此外,还要为Oracle进程和服务配置适当的权限,这通常通过修改系统上的初始化脚本和使用`chown`、`chmod`命令来完成。 最后,安装完成后...
1. **指定UTL_FILE_DIR参数**:在初始化参数文件中设置`UTL_FILE_DIR`。 ```sql SQL> EXECUTE DBMS_LOGMNR_D.BUILD('oradb.ora','c:\oracle\oradb\log'); ``` 2. **添加日志文件**:将需要分析的日志文件添加到...
首先,在`init.ora`文件中设置`UTL_FILE_DIR`参数来指定文件读写的目录: ```sql UTL_FILE_DIR = '' ``` **2. 构建LogMiner** 接下来,执行以下PL/SQL代码以初始化LogMiner会话: ```sql SQL> execute dbms_...
强制进行日志文件的切换有助于确保所有未提交的事务都被写入到重做日志文件中,这对于备份或恢复操作至关重要。 **命令格式:** ```sql ALTER SYSTEM SWITCH LOGFILE; ``` **示例:** ```sql SQL> ALTER SYSTEM ...
- 在`init.ora`文件中指定`utl_file_dir`参数的值。 ``` A、in the init.ora specify utl_file_dir='...' ``` - 构建LogMiner字典。 ``` B、sql> execute dbms_logmnr_d.build('oradb.ora','c:\oracle\oradb\...
1. **错误处理**:导入过程中可能出现的数据格式错误、约束冲突等,可以通过`EXCEPTION`语句捕获并处理,或者使用`UTL_FILE`包记录错误日志,便于后期分析。 2. **性能监控**:使用`DBMS_MONITOR`或`V$视图`监控...