は私がデバッグすると、この手順でexecute immediate
にステップオーバーする場合、execute immediate
を使用してプロシージャを作成し、それは次のようなメッセージが表示されます。UPDATEとCONNECT BYはサポートされていますか?
Oracleの例外は、あなたのコード内で発生しています。コードに例外ハンドラが含まれている場合は、引き続きハンドラをステップ実行することができます。そうしないと、エラーメッセージが表示され、次のステップは実行を終了します。
と、私は、クエリを取り出した後、すぐに実行中のクエリは次のとおりです。
update mstarea
set '||v_temp_position||' = :pid
where areacode = :pnewarea1
connect by prior areacode = areaparent
start with areacode in (:pnewarea1, :pnewarea2);
と私はそのクエリをコンパイル/実行しようと、それはこのようなエラーがあります:
がORA-00933:SQLコマンドが正常に
connect by prior
がでサポートされて終了していません?
これは私の手続きであり、execute immediate
に達したときのエラーはupdate mstarea
以下です。
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;
これを解決するにはどうすればよいですか?
私の質問を編集していただきありがとうございます@Jonny –
'connect by prior'は' update'でサポートされていますか? - そうではありません:https://docs.oracle.com/database/121/SQLRF/statements_10008.htm#SQLRF01708 –
@a_horse_with_no_name情報ありがとうございました! –