我有以下程序:
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;
答案 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;