麻烦大家帮我看看,关于UTL_FILE的使用问题
我的 Oracle 的版本为本:Oracle8i Enterprise Edition Release 8.1.6.0.0
下面是Oracle8i Pl/SQl的一段代码:
create or replace package Debug is v_DebugDir varchar2(50):='D:\';
v_DebugFile varchar2(20):='debug.out'; Procedure Debug(p_Description in varchar2,
p_Value in varchar2);
Procedure Reset(p_NewFile in varchar2:=v_DebugFile,
p_NewDir in varchar2:=v_DebugDir);
Procedure FileOpen(p_NewFile in varchar2:=v_DebugFile,
p_NewDir in varchar2:=v_DebugDir); Procedure FileClose;
end Debug;
create or replace package body Debug is Procedure Debug(p_Description in varchar2,
p_Value in varchar2) is
begin
if not utl_file.is_open(v_DebugHandle) then
FileOpen;
end if;
utl_file.putf(v_DebugHandle,'%s: %s\n',
p_Description,p_Value);
UTL_FILE.fflush(v_DebugHandle);
EXCEPTION
WHEN UTL_FILE.INVALID_OPERATION THEN
RAISE_APPLICATION_ERROR(-20102,
'Debug: Invalid Operation');
WHEN UTL_FILE.INVALID_FILEHANDLE THEN
RAISE_APPLICATION_ERROR(-20103,
'Debug: Invalid File Handle');
WHEN UTL_FILE.WRITE_ERROR THEN
RAISE_APPLICATION_ERROR(-20104,
'Debug: Write Error');
WHEN UTL_FILE.INTERNAL_ERROR THEN
RAISE_APPLICATION_ERROR(-20104,
'Debug: Internal Error');
END Debug; Procedure Reset(p_NewFile in varchar2:=v_DebugFile,
p_NewDir in varchar2:=v_Debugdir) is begin
if utl_file.is_open(v_DebugHandle) then
FileClose;
end if;
FileOpen(p_NewFile,p_NewDir);
END Reset; Procedure FileOpen(p_NewFile in varchar2:=v_DebugFile,
p_NewDir in varchar2:=v_DebugDir) is
begin
v_DebugHandle:=utl_file.fopen(p_NewDir,p_NewFile,'w'); v_DebugFile:=p_NewFile;
v_DebugDir:=p_NewDir;
EXCEPTION
WHEN UTL_FILE.INVALID_PATH THEN
RAISE_APPLICATION_ERROR(-20100, 'Open: Invalid Path');
WHEN UTL_FILE.INVALID_MODE THEN
RAISE_APPLICATION_ERROR(-20101, 'Open: Invalid Mode');
WHEN UTL_FILE.INVALID_OPERATION THEN
RAISE_APPLICATION_ERROR(-20101, 'Open: Invalid Operation');
WHEN UTL_FILE.INTERNAL_ERROR THEN
RAISE_APPLICATION_ERROR(-20101, 'Open: Internal Error'); END FileOpen; Procedure FileClose is Begin
utl_file.fclose(v_DebugHandle);
EXCEPTION
WHEN UTL_FILE.INVALID_FILEHANDLE THEN
RAISE_APPLICATION_ERROR(-20300,
'Close: Invalid File Handle');
WHEN UTL_FILE.WRITE_ERROR THEN
RAISE_APPLICATION_ERROR(-20301,
'Close: Write Error');
WHEN UTL_FILE.INTERNAL_ERROR THEN
RAISE_APPLICATION_ERROR(-20302,
'Close: Internal Error'); End FileClose;
end Debug; 我在调用 Debug.Debug('Scott', 'First call')时发生错误如下
ORA-20100: Open: Invalid Path
ORA-06512: 在 "ERPUSER.DEBUG", line 56
ORA-06512: 在 "ERPUSER.DEBUG", line 17
ORA-06512: 在 line 1
我已经在服务器上设置了参数 UTL_FILE_DIR=D:\,是不是还有东西要设置??我是客户端调用此程序,麻烦大家帮我解决此问题.
我的 Oracle 的版本为本:Oracle8i Enterprise Edition Release 8.1.6.0.0
下面是Oracle8i Pl/SQl的一段代码:
create or replace package Debug is v_DebugDir varchar2(50):='D:\';
v_DebugFile varchar2(20):='debug.out'; Procedure Debug(p_Description in varchar2,
p_Value in varchar2);
Procedure Reset(p_NewFile in varchar2:=v_DebugFile,
p_NewDir in varchar2:=v_DebugDir);
Procedure FileOpen(p_NewFile in varchar2:=v_DebugFile,
p_NewDir in varchar2:=v_DebugDir); Procedure FileClose;
end Debug;
create or replace package body Debug is Procedure Debug(p_Description in varchar2,
p_Value in varchar2) is
begin
if not utl_file.is_open(v_DebugHandle) then
FileOpen;
end if;
utl_file.putf(v_DebugHandle,'%s: %s\n',
p_Description,p_Value);
UTL_FILE.fflush(v_DebugHandle);
EXCEPTION
WHEN UTL_FILE.INVALID_OPERATION THEN
RAISE_APPLICATION_ERROR(-20102,
'Debug: Invalid Operation');
WHEN UTL_FILE.INVALID_FILEHANDLE THEN
RAISE_APPLICATION_ERROR(-20103,
'Debug: Invalid File Handle');
WHEN UTL_FILE.WRITE_ERROR THEN
RAISE_APPLICATION_ERROR(-20104,
'Debug: Write Error');
WHEN UTL_FILE.INTERNAL_ERROR THEN
RAISE_APPLICATION_ERROR(-20104,
'Debug: Internal Error');
END Debug; Procedure Reset(p_NewFile in varchar2:=v_DebugFile,
p_NewDir in varchar2:=v_Debugdir) is begin
if utl_file.is_open(v_DebugHandle) then
FileClose;
end if;
FileOpen(p_NewFile,p_NewDir);
END Reset; Procedure FileOpen(p_NewFile in varchar2:=v_DebugFile,
p_NewDir in varchar2:=v_DebugDir) is
begin
v_DebugHandle:=utl_file.fopen(p_NewDir,p_NewFile,'w'); v_DebugFile:=p_NewFile;
v_DebugDir:=p_NewDir;
EXCEPTION
WHEN UTL_FILE.INVALID_PATH THEN
RAISE_APPLICATION_ERROR(-20100, 'Open: Invalid Path');
WHEN UTL_FILE.INVALID_MODE THEN
RAISE_APPLICATION_ERROR(-20101, 'Open: Invalid Mode');
WHEN UTL_FILE.INVALID_OPERATION THEN
RAISE_APPLICATION_ERROR(-20101, 'Open: Invalid Operation');
WHEN UTL_FILE.INTERNAL_ERROR THEN
RAISE_APPLICATION_ERROR(-20101, 'Open: Internal Error'); END FileOpen; Procedure FileClose is Begin
utl_file.fclose(v_DebugHandle);
EXCEPTION
WHEN UTL_FILE.INVALID_FILEHANDLE THEN
RAISE_APPLICATION_ERROR(-20300,
'Close: Invalid File Handle');
WHEN UTL_FILE.WRITE_ERROR THEN
RAISE_APPLICATION_ERROR(-20301,
'Close: Write Error');
WHEN UTL_FILE.INTERNAL_ERROR THEN
RAISE_APPLICATION_ERROR(-20302,
'Close: Internal Error'); End FileClose;
end Debug; 我在调用 Debug.Debug('Scott', 'First call')时发生错误如下
ORA-20100: Open: Invalid Path
ORA-06512: 在 "ERPUSER.DEBUG", line 56
ORA-06512: 在 "ERPUSER.DEBUG", line 17
ORA-06512: 在 line 1
我已经在服务器上设置了参数 UTL_FILE_DIR=D:\,是不是还有东西要设置??我是客户端调用此程序,麻烦大家帮我解决此问题.
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货