2017-08-08 18 views
0

なぜ以下のエラーが表示されるのですか?コードの何が間違っているのか教えてください。 ORA-06511:PL/SQL:カーソルすでにオープンプロシージャ内でのカーソルの使用

コード:

create or replace procedure student_info IS 
c_id student_details.student_id%type ;  
c_name student_details.student_name%type; 
c_status student_details.student_status%type; 

cursor stu_c1 IS 
select * from student_details 
where student_status='Absent'; 
begin 
open stu_c1; 
Fetch stu_c1 into c_id,c_name,c_status ; 
for rec in stu_c1 loop 
insert into student_data values (c_status,c_id,c_name); 
commit; 
end loop; 
CLOSE stu_c1;  
end; 

答えて

1

明示的なカーソルでFORループを使用している場合は、open/fetch/close/handle NOTFOUNDは必要ありません。

... 
begin 
--open stu_c1; -- extra, not needed 
--Fetch stu_c1 into c_id,c_name,c_status ; -- extra, not needed 
for rec in stu_c1 loop -- that's enough 
insert into student_data values (c_status,c_id,c_name); 
.... 
end loop; 
--CLOSE stu_c1; -- not needed 

また、あなたはオープン、クローズ、フェッチNOTFOUNDを扱うが、FOR ... INを使用しないでください。

+0

ありがとうございます。私たちはc_statusに値を割り当てていないので、データは "student_data"テーブルに挿入されません。c- – Ali

+0

コミットを忘れていませんか?また、構文を確認してください。 'FOR'ループで' insert into student_data values(rec.student_status、rec.id、rec.name)のように挿入する必要があります。 'student_status、id、およびnameが' student_details'テーブルのフィールドであると仮定します – a1ex07

関連する問題