Wird der folgende Code zu einem Deadlock führen oder sollte er problemlos funktionieren? Ich habe etwas Ähnliches und es funktioniert, aber ich hätte nicht gedacht, dass es das tut. Ich dachte, die Sperre der übergeordneten Prozedur würde zu einem Deadlock für die untergeordnete Prozedur führen, aber das scheint nicht der Fall zu sein.
Wenn es funktioniert, warum? Meine Vermutung ist, dass das verschachtelte FOR UPDATE nicht in ein Deadlock läuft, weil es intelligent genug ist, um zu erkennen, dass es von derselben Prozedur aufgerufen wird, die die aktuelle Sperre hat.
Wäre dies ein Deadlock, wenn FOO_PROC keine verschachtelte Prozedur wäre?
DECLARE
FOO_PROC(c_someName VARCHAR2) as
cursor c1 is select * from awesome_people where person_name = c_someName FOR UPDATE;
BEGIN
open c1;
update awesome_people set person_name = UPPER(person_name);
close c1;
END FOO_PROC;
cursor my_cur is select * from awesome_people where person_name = 'John Doe' FOR UPDATE;
BEGIN
for onerow in c1 loop
FOO_PROC(onerow.person_name);
end loop;
END;