GOTO文、ユーザ例外


oracleでのGOTO文のサンプル。
また、ユーザ例外でも似たようなことができるので併せてメモ。



HARADA_LAB3.sql

CREATE OR REPLACE FUNCTION HARADA_LAB3	(PA_MESSAGE			OUT	VARCHAR2
										) RETURN NUMBER AS

--例外の定義
USER_ABEND	EXCEPTION;

BEGIN


  DBMS_OUTPUT.PUT_LINE('proc start ');

  DBMS_OUTPUT.PUT_LINE('proc A ');

--"HARADA_GOTO"ラベルへジャンプ
GOTO HARADA_GOTO;

  DBMS_OUTPUT.PUT_LINE('proc B ');

--ラベルの定義
<<HARADA_GOTO>>

  DBMS_OUTPUT.PUT_LINE('proc C ');

--例外を発生させてEXCEPTIONへ
  RAISE USER_ABEND;

  DBMS_OUTPUT.PUT_LINE('proc D ');

  DBMS_OUTPUT.PUT_LINE('proc end ');

  RETURN 0;

EXCEPTION
  
  WHEN USER_ABEND THEN

  DBMS_OUTPUT.PUT_LINE('proc abend ');

  RETURN 0;

END;
/


実行結果

proc start
proc A
proc C
proc abend