例
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例外宣言は無効になります.