I unter Verwendung eines Verfahrens execute immediate
erstellt, wenn ich debuggen und zu execute immediate
in diesem Verfahren Schritt über, es zeigt die folgende Meldung:Wird UPDATE und CONNECT BY unterstützt?
Eine Oracle-Ausnahme im Code aufgetreten ist. Wenn der Code einen Ausnahmebehandler enthält, können Sie den Handler weiter durchlaufen. Andernfalls wird die Fehlermeldung angezeigt und der nächste Schritt beendet die Ausführung.
und dann habe ich die Abfrage herausnehmen, die Abfrage in ausführen sofort ist:
update mstarea
set '||v_temp_position||' = :pid
where areacode = :pnewarea1
connect by prior areacode = areaparent
start with areacode in (:pnewarea1, :pnewarea2);
und ich versuchen, diese Abfrage auszuführen/kompilieren, hat es einen Fehler wie folgt aus:
ORA-00933: SQL-Befehl nicht richtig beendet
Ist connect by prior
mitunterstützt?
Dies ist mein Verfahren, und der Fehler ist unter update mstarea
, wenn es erreicht.
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;
Was soll ich tun, um dies zu beheben?
danke für die Bearbeitung meiner Frage @Jonny –
Wird 'connect by prior' mit' update' unterstützt? - Nein, es ist nicht: https://docs.oracle.com/database/121/SQLRF/statements_10008.htm#SQLRF01708 –
@a_horse_with_no_name danke für die Informationen, Sir! –