使用UTL_FILE执行PL / SQL过程

时间:2015-09-17 06:50:58

标签: oracle plsql oracle11g

我有以下程序:

new String("Mario")

此过程已成功编译,但是当我尝试运行/执行它时:

Mario

我有以下错误:

    CREATE OR REPLACE PROCEDURE sal_status(
  p_dir IN VARCHAR2, p_filename IN VARCHAR2) IS
  f_file UTL_FILE.FILE_TYPE;
BEGIN
  f_file:= UTL_FILE.FOPEN (p_dir, p_filename, 'W');
  UTL_FILE.PUT_LINE(f_file, 'REPORT: GENERATED ON ' || SYSDATE);
  UTL_FILE.FCLOSE (f_file);

  EXCEPTION
 WHEN UTL_FILE.INVALID_FILEHANDLE THEN
  RAISE_APPLICATION_ERROR(-20001,'Invalid File.');
 WHEN UTL_FILE.WRITE_ERROR THEN
  RAISE_APPLICATION_ERROR (-20002, 'Unable to write to file');


END sal_status;

2 个答案:

答案 0 :(得分:3)

正如您在UTL_FILE文档中看到的FOPEN功能:
http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/u_file.htm#i1003526
您需要创建目录对象
http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_5007.htm
CREATE OR REPLACE DIRECTORY UTL_FILE AS 'directory/path'
并将此目录的读取权限授予您的用户
http://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_9013.htm#i2125999
GRANT READ ON UTL_FILE TO [your_user]

答案 1 :(得分:0)

谢谢大家,

下面提供的正确变体:

CREATE OR REPLACE PROCEDURE sal_status(
  p_dir IN VARCHAR2, p_filename IN VARCHAR2) IS
  f_file UTL_FILE.FILE_TYPE;
BEGIN
  f_file:= UTL_FILE.FOPEN ('P_DIR', 'test.txt', 'W');
  UTL_FILE.PUT_LINE(f_file, 'REPORT: GENERATED ON ' || SYSDATE);
  UTL_FILE.FCLOSE (f_file);

  EXCEPTION
 WHEN UTL_FILE.INVALID_FILEHANDLE THEN
  RAISE_APPLICATION_ERROR(-20001,'Invalid File.');
 WHEN UTL_FILE.WRITE_ERROR THEN
  RAISE_APPLICATION_ERROR (-20002, 'Unable to write to file');
END sal_status;

BEGIN
  sal_status('P_DIR', 'test.txt');
END;