初心者としてこの種の構文の問題に対処する方法については、結合ロジックに気を取られないように、可能な限り最小の例に単純化する練習をすることをお勧めします.
たとえば、これをすばやくテストして、機能しないことを確認できます :
declare rc sys_refcursor; begin open rc for case when 1 = 1 then select * from dual -- not valid end; end;
プレ>で失敗します
ORA-06550: line 6, column 29: PLS-00103: Encountered the symbol "SELECT" when expecting one of the following: ...
プレ>
open rc for select
のため 構文は 1 つのステートメントである必要があり、条件ロジックで分割することはできません。
create function
がないことに注意してください 、パラメーター、または結合などを複雑にします。構文を整理したら、これらすべてを元に戻すことができます。case
ステートメントの構文は こちら 。 (case
にはいくつかの異なる種類があることに注意してください .) どちらかである必要がありますdeclare rc sys_refcursor; begin case when 1 = 1 then open rc for select * from dual; end case; end;
プレ>または
if
を使用して同等の :declare rc sys_refcursor; begin if 1 = 1 then open rc for select * from dual; end if; end;
プレ>