ben hata ayıklama ve bu prosedürde execute immediate
üzerinde adım zaman, execute immediate
kullanarak bir prosedür oluşturulmuş, aşağıdaki mesajı gösterir:UPDATE ve CONNECT BY destekleniyor mu?
Bir Oracle istisna kodunuzda oluştu. Kod bir istisna işleyici içeriyorsa, işleyiciye adım atmaya devam edebilirsiniz; aksi halde, hata mesajı görüntülenir ve bir sonraki adım yürütmeden çıkar. Ben sorguyu çıkarıp
sonra, sorgu içinde hemen yürütme geçerli:
:update mstarea set '||v_temp_position||' = :pid where areacode = :pnewarea1 connect by prior areacode = areaparent start with areacode in (:pnewarea1, :pnewarea2);
ve G/çalıştırması sorgu derlemeye deneyin, böyle bir hata var
ORA-00933: SQL komutu düzgün
connect by prior
ile desteklenir mi erdi değil?
Bu benim yordamımdır ve update mstarea
'un execute immediate
ulaştığı zamanki hatanın altındadır.
CREATE OR REPLACE procedure PROC1(pid in varchar2, pposition in varchar2, pnewarea1 in varchar2, pnewarea2 in varchar2)
is
v_error_message varchar2(255);
v_temp_position varchar2(25 byte);
v_sql_statement varchar2(255);
n_count_role number;
cursor cuser is
select userid from master.mstuser where id = pid;
begin
for cdata in cuser
loop
begin
select count(role) into n_count_role from mstmapping where role = pposition;
if n_count_role > 0 then
begin
..........
if pnewarea1 = 'ALL' then
..........
else
..........
------------------- update mstarea -------------------
if pposition in ('A', 'B') then
select 'AB' into v_temp_position from dual;
else
select pposition into v_temp_position from dual;
end if;
v_sql_statement := 'update mstarea set '||v_temp_position||' = :pid where areacode = :pnewarea1 connect by prior areacode = areaparent start with areacode in (:pnewarea1, :pnewarea2)';
execute immediate v_sql_statement using pid, pnewarea1, pnewarea1, pnewarea2; -- advice from @Rene
------------------------------------------------------
..........
end;
end if;
end;
end if;
exception
when others then
..........
rollback;
end;
commit;
exit when cuser%notfound;
end loop;
end;
Bunu düzeltmek için ne yapmalıyım?
Sorumu düzeltmek için teşekkürler @Jonny –
'' önceki 'ile bağlan' update' ile destekleniyor mu? - hayır değil: https://docs.oracle.com/database/121/SQLRF/statements_10008.htm#SQLRF01708 –
@a_horse_with_no_name bilgi için teşekkürler efendim! –