我正在尝试使用第二个程序调用过程。第一个过程将创建一个文件,而第二个过程将为游标中的每个记录调用第一个过程。我希望的结果是每个记录都有一个单独的文件。当我运行该过程时,它将在文件上创建并生成以下错误:
ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 536
ORA-29283: invalid file operation
ORA-06512: at "PS.EXPORT_PROC", line 30
ORA-06512: at "PS.LOOP_EXPORT_PROC2", line 15
ORA-06512: at line 2
Process exited.
第一个程序如下:
create or replace
PROCEDURE "EXPORT_PROC"
(Psectionid number)
is
output_file_one utl_file.file_type;
--------------------------------------------------------------
Cursor Crs is
select s.student_number student_number, s.lastfirst as student_name,
cc.expression, c.course_name, t.lastfirst,
ps_customfields.getstudentscf(s.id,'blend_learn_score') grade
from
cc join courses c
on cc.course_number=c.course_number
join students s
on cc.studentid=s.id
join teachers t
on cc.teacherid=t.id
where cc.termid in (2300,2301,2302)
and cc.sectionid IN(30024,30065, 30276, 30064, 30052)
and s.enroll_status=0;
-----------------------------------------------------------------
Begin
For rec in Crs LOOP
output_file_one := utl_file.fopen ( 'BLENDED_LEARNING', rec.lastfirst || '-' ||
rec.expression || '-' || rec.course_name || '.txt' , 'W');
utl_file.putF (output_file_one, 'Student_Number' || chr(9) || 'Student_Name'||chr(9)||'Grade');
utl_file.fflush(output_File_one);
END LOOP;
For rec in Crs LOOP
utl_file.put_line (output_file_one, rec.student_number || chr(9) || rec.student_name ||
chr(9) || REC.grade);
utl_file.fflush(output_file_one);
End Loop;
utl_file.fclose(output_file_one);
END;
第二个程序应该将值传递给第一个
create or replace
PROCEDURE LOOP_EXPORT_PROC2
IS
Cursor Blended_Crs is
select distinct sectionid
from cc
inner join courses a on cc.course_number = a.course_number
where cc.termid >= 2300 and a.course_name like ('AR%') and cc.schoolid = 3;
BEGIN
For rec in Blended_Crs LOOP
EXPORT_PROC(rec.sectionid);
End Loop;
END LOOP_EXPORT_PROC2;
它应循环并在第二个过程中为crs2中的每个记录创建一个文件,但在运行该过程时,它将成功创建一个文件并生成顶部列出的错误。
我已验证目录的权限是否正确。
我的问题是你能想到我会得到这个错误的任何理由吗?根据代码,它应该能够为第二个过程游标中的每个记录运行一次第一个过程。我这样做是为了让我可以将不同的周长传递到第一个程序中,并为每个周边设置不同的文件。
答案 0 :(得分:0)
您有几个语法错误。例如:
select distinct FIELD4
from
where perimeter1=TRUE, perimeter2 in (1,2,3);
应该是
select distinct FIELD4
from
where perimeter1=TRUE AND perimeter2 in (1,2,3);
这里缺少分号:
Cursor crs is
select field1 , field2, field3
from table1
你没有在这里正确关闭你的外环:
For rec in crs LOOP
output_file_one := utl_file.fopen ( 'DIRECTORY', 'file.txt' , 'W');
For rec in crs LOOP
utl_file.put_line (output_file_one, rec.field1 || chr(9) ||
rec.field2 || chr(9) || REC.field3);
End Loop;
utl_file.fclose(output_file_one);
您需要先调查源代码中的编译错误,然后才能在此处发布问题。使用show errors
编译后,您可以查看错误。