例
000001 IDENTIFICATION DIVISION.
000002 PROGRAM-ID. P5778.
000003 ENVIRONMENT DIVISION.
000004 CONFIGURATION SECTION.
000005 REPOSITORY.
000006 CLASS SYSEXP AS "System.Exception".
000007 DATA DIVISION.
000008 WORKING-STORAGE SECTION.
000009 01 WDA OBJECT REFERENCE SYSEXP.
000010 EXEC SQL BEGIN DECLARE SECTION END-EXEC.
000011 01 在庫表.
000012 02 製品番号 PIC S9(4) COMP-5.
000013 02 製品名 PIC X(20).
000014 02 在庫数量 PIC S9(9) COMP-5.
000015 02 倉庫番号 PIC S9(4) COMP-5.
000016 01 SQLSTATE PIC X(5).
000017 01 SQLMSG PIC X(128).
000018 EXEC SQL END DECLARE SECTION END-EXEC.
000019 PROCEDURE DIVISION.
000020 EXEC SQL WHENEVER SQLERROR GO TO :L1 END-EXEC
000021 EXEC SQL
000022 DECLARE CUR1 CURSOR FOR SELECT * FROM STOCK
000023 END-EXEC.
000024 EXEC SQL OPEN CUR1 END-EXEC.
000025*
000026 TRY
000027 EXEC SQL FETCH CUR1 INTO :在庫表 END-EXEC
000028 CATCH WDA
000029 DISPLAY SQLSTATE " : " SQLMSG
000030 FINALLY
000031 EXEC SQL CLOSE CUR1 END-EXEC
000032 END-TRY.
000033 L1.
000034 EXIT PROGRAM
000035 END PROGRAM P5778.
P5778.cob (31) : JMN5778I-W TRY文のFINALLYブロック内でWHENEVER文は無効となります.
詳細な説明
GO TO指定のWHENEVER文(埋込みSQL例外宣言)が有効である場合,埋込みSQL文の直後には暗黙にSQL例外処理としてGO TO文が生成されます.一方,TRY文のFINALLYブロックにGO TO文は記述できません.
このため,TRY文のFINALLYブロック内に記述した埋込みSQL文に対してはSQL例外宣言は無効になります.