Oracle utl_file文件写入读取
--1、创建服务器目录
(1)在system用户下执行如下命令:CREATE OR REPLACE DIRECTORY MAIL_FILE_DIR AS '/tmp/data/DEV';
(2)给创建的目录赋权限,执行:GRANT read ,write ON DIRECTORY MAIL_FILE_DIR TO PUBLIC;
如果是双节点的服务器,在两个服务器上执行上述sql语句
--2、在数据库服务器上创建/mail_file/data/PROD目录
切换到主目录'/'下执行创建目录命令
目录创建完成后在主目录'/'下执行赋权限命令:chmod 777 /mail_file/data/PROD
--3、向目录下写入文件
DECLARE
fhandle utl_file.file_type;
BEGIN
fhandle := utl_file.fopen('MAIL_FILE_DIR'
,'example.txt'
,'w');
utl_file.put_line(fhandle
,'gh test write one');
utl_file.put_line(fhandle
,'gh test write two');
utl_file.fclose(fhandle);
END;
--4、读出文件的内容
DECLARE
fhandle utl_file.file_type;
fp_buffer VARCHAR2(4000);
BEGIN
fhandle := utl_file.fopen('MAIL_FILE_DIR'
,'example.txt'
,'R');
utl_file.get_line(fhandle
,fp_buffer);
dbms_output.put_line(fp_buffer);
utl_file.get_line(fhandle
,fp_buffer);
dbms_output.put_line(fp_buffer);
utl_file.fclose(fhandle);
--1、创建服务器目录
(1)在system用户下执行如下命令:CREATE OR REPLACE DIRECTORY MAIL_FILE_DIR AS '/tmp/data/DEV';
(2)给创建的目录赋权限,执行:GRANT read ,write ON DIRECTORY MAIL_FILE_DIR TO PUBLIC;
如果是双节点的服务器,在两个服务器上执行上述sql语句
--2、在数据库服务器上创建/mail_file/data/PROD目录
切换到主目录'/'下执行创建目录命令
目录创建完成后在主目录'/'下执行赋权限命令:chmod 777 /mail_file/data/PROD
--3、向目录下写入文件
DECLARE
fhandle utl_file.file_type;
BEGIN
fhandle := utl_file.fopen('MAIL_FILE_DIR'
,'example.txt'
,'w');
utl_file.put_line(fhandle
,'gh test write one');
utl_file.put_line(fhandle
,'gh test write two');
utl_file.fclose(fhandle);
END;
--4、读出文件的内容
DECLARE
fhandle utl_file.file_type;
fp_buffer VARCHAR2(4000);
BEGIN
fhandle := utl_file.fopen('MAIL_FILE_DIR'
,'example.txt'
,'R');
utl_file.get_line(fhandle
,fp_buffer);
dbms_output.put_line(fp_buffer);
utl_file.get_line(fhandle
,fp_buffer);
dbms_output.put_line(fp_buffer);
utl_file.fclose(fhandle);
END;
常见报错:
ORA-29283 : 文件操作无效
ORA-06512 : 在"SYS.UTL_FILE", line 449
ORA-29283 : 文件操作无效
错误原因:在数据库下面没有目录或者目录没有赋读写权限
解决办法:先查看文件和路径是哪一步权限不够,然后针对权限重新赋权限。