我有一个成功运行的plsql过程。当我把这个过程调用到另一个包中的另一个过程中时,它错误地输出了无效的文件ID。
Proc test1(debug varchar2 default 0) as
dt date;
cursor 1
select sysdate as dt from dual;
Begin
IF month(dt) < Dec THEN
update table1
set term_date= sysdate +10
where table1_year='2023'
END IF;
End;
Procedure test2(value varchar2) as
Begin
report_file:=utl_file.fopen(lC_report_dir_obj_out,lC_report_fname,'w');
If value='Y' THEN
BEGIN
Proc test1(1);
dbms_output.put_line('Run test1 success');
lv_msg :=success;
Exception
WHEN OTHERS THEN
dbms_output.put_line('Run test1 success');
lv_msg :=sqlerrm;
END;
utl_file.put_line(report_file,lv_msg,autoflush=>TRUE);
End if ;
End test2;
错误:ORA-29282:无效文件ID ORA-06512:在“SYS.UTL_FILE”,第166行ORA-06512:at“SYS.UTL_FILE”,line 866
如果不是为了过程调用,则写入文件没有问题。该过程有许多循环,并从游标开始遍历每一行。
1条答案
按热度按时间zqdjd7g91#
过程test1有一个fclose all,它关闭了所有文件,包括过程test2打开的文件。我进行了变更,手术成功完成。