Я попытался обновить таблицу в поле1 следующей процедурой pl sql, компиляцию и выполнение, выполненные без каких-либо ошибок, поставить, когда я вызываю эту процедуру, обновление не работает. Не знаю почему! Я использовал (for update of .... current of
) заявление с курсором и код нижеинструкция по обновлению во внутреннем цикле с процедурой pl sql
create or replace procedure p1 is
r1 table1%rowtype;
r2 table2%rowtype;
cursor c1 is select * from table1 for update of field1;
cursor c2 is select * from table2;
begin
open c1;
loop <<outer>>
fetch c1 into r1;
open c2;
loop <<inner>>
fetch c2 into r2;
if condition then
dbms_output.put_line('ok');
update table1
set field1= 1
where current of c1;
end if;
exit when c2%notfound;
end loop inner;
close c2;
exit when c1%notfound;
end loop outer;
close c1;
end;
/
Примечания: условие в операторе IF является правильным, потому что, когда я выполнить процедуру заявление (dbms_output.put_line('ok');
) успешно выполнено каждый раз, когда цикл выполняется, когда Я удаляю инструкцию update и (для обновления ... current of), но когда я поставил оператор update с (для обновления ... текущего) оператора с тем же условием, инструкция обновления не Работа.
Вам не нужна петля вообще. Насколько я могу судить по вашему запутанному примеру, это, вероятно, все может быть сделано с помощью одного оператора обновления. –
+1 к @a_horse_with_no_name. я также хотел бы добавить, что нет смысла обновлять каждую строку c1 для каждой строки c2. вы будете обновлять одну и ту же строку снова и снова. вам не нужно plsql здесь. – haki