Symfoware Parallel Server RDBユーザーズガイド 応用プログラム開発編 |
目次
索引
![]() ![]() |
第2章 データベースを処理する応用プログラムの開発の概要 | > 2.2 SQL埋込みCOBOLプログラムの作成方法 |
ここでは、SQL埋込みCOBOLプログラムに記述するSQL文中の名前の一意性と有効範囲について説明します。
入れ子構造のSQL埋込みCOBOLプログラムに、以下の埋込みSQL文を記述する場合は、注意が必要です。
埋込み例外宣言
ホスト変数
カーソル宣言とホスト変数の関係
埋込み例外宣言で指定したGOTOの手続き名は、次の同一エラー条件が出現するまで有効となります。
埋込み例外宣言の有効範囲が、複数の入れ子プログラムにまたがる場合は、有効となるすべてのプログラム中にGOTOの手続き名を記述する必要があります。手続き名を記述してない場合は、翻訳時にGOTO文に指定した手続き名がない旨のエラーとなります。
例
埋込み例外宣言のGOTO手続き名が、入れ子関係のプログラムSAMPLE01、SAMPLE02およびSAMPLE03で有効となる場合には、それぞれのプログラム内にGOTOの手続き名を記述します。
*――――――――――――――(プログラムSAMPLE01)――――――――――* | IDENTIFICATION DIVISION. | | PROGRAM-ID. SAMPLE01. | | ENVIRONMENT DIVISION. | | DATA DIVISION. | | PROCEDURE DIVISION. | | 〜 | | EXEC SQL WHENEVER SQLERROR GOTO :ERR1 END-EXEC. | | EXEC SQL OPEN CUR1 … END-EXEC. | | ERR1. (2) | | 〜 | |*―――――――――――――(プログラムSAMPLE02)―――――――――*| ||IDENTIFICATION DIVISION. || ||PROGRAM-ID. SAMPLE02. || ||PROCEDURE DIVISION. || || 〜 || || EXEC SQL SELECT … END-EXEC. || ||ERR1. (1) || || 〜 || ||END PROGRAM SAMPLE02. || |*―――――――――――――――――――――――――――――――――*| |*―――――――――――――(プログラムSAMPLE03)―――――――――*| ||IDENTIFICATION DIVISION. || ||PROGRAM-ID. SAMPLE03. || ||PROCEDURE DIVISION. || || 〜 || || EXEC SQL OPEN CUR2 … END-EXEC. || ||ERR1. (1) || || || || 〜 || ||END PROGRAM SAMPLE03. || |*―――――――――――――――――――――――――――――――――*| | END PROGRAM SAMPLE01. | *―――――――――――――――――――――――――――――――――――*主プログラムの埋込み例外宣言で指定したGOTOの手続き名“ERR1”((2))には、各入れ子プログラムから分岐できません。このため、各入れ子プログラム中に、主プログラムの埋込み例外宣言で指定したGOTOの手続き名“ERR1”((1))を記述します。
ホスト変数の名前は、SQL埋込みCOBOLプログラムで一意である必要があります。名前が一意でない場合は、翻訳時でエラーになります。
このため、複数の入れ子プログラムで共通に使うホスト変数、SQLSTATEおよびSQLMSGは、大域名として一番外側のプログラムに記述する必要があります。
例
複数の入れ子プログラムで、共通に使うホスト変数をグローバル域に記述する例を、以下に示します。
*――――――――――――――(プログラムSAMPLE01)――――――――――* | IDENTIFICATION DIVISION. | | PROGRAM-ID. SAMPLE01. | | ENVIRONMENT DIVISION. | | DATA DIVISION. | | WORKING-STORAGE SECTION. | | EXEC SQL BEGIN DECLARE SECTION END-EXEC. | | 01 SQLSTATE GLOBAL PIC X(5). *複数の入 | | 01 SQLMSG GLOBAL PIC X(255). *れ子プロ | | 01 COMMON1 GLOBAL PIC S9(9) BINARY.|グラムで | | 01 COMMON2 GLOBAL PIC S9(9) BINARY.*有効 | | 01 PRIVATE1 PIC S9(9) BINARY. * | | 01 PRIVATE2 PIC S9(9) BINARY. *SAMPLE01 | | 〜 *だけで有 | | EXEC SQL END DECLARE SECTION END-EXEC. 効 | | PROCEDURE DIVISION. | | 〜 | |*―――――――――――――(プログラムSAMPLE02)―――――――――*| ||IDENTIFICATION DIVISION. || ||PROGRAM-ID. SAMPLE02. || ||ENVIRONMENT DIVISION. || ||DATA DIVISION. || ||WORKING-STORAGE SECTION. || || EXEC SQL BEGIN DECLARE SECTION END-EXEC. || ||01 PRIVATE3 PIC S9(9) BINARY. *SAMPLE02 || ||01 PRIVATE4 PIC S9(9) BINARY. *だけで有 || || 〜 *効 || || EXEC SQL END DECLARE SECTION END-EXEC. || ||PROCEDURE DIVISION. || || 〜 || ||END PROGRAM SAMPLE02. || |*―――――――――――――――――――――――――――――――――*| | END PROGRAM SAMPLE01. | *―――――――――――――――――――――――――――――――――――*
カーソル宣言で使用したホスト変数が評価されるのは、カーソルオープン文の実行時です。このため、複数の入れ子プログラムで、ホスト変数が指定された同一のカーソルをオープンする場合は、カーソル宣言に指定したホスト変数は、大域名として一番外側のプログラムに記述する必要があります。
例
カーソル宣言文を一番外側のプログラムに記述する例を以下に示します。
*――――――――――――――(プログラムSAMPLE01)――――――――――* | IDENTIFICATION DIVISION. | | PROGRAM-ID. SAMPLE01. | | ENVIRONMENT DIVISION. | | DATA DIVISION. | | WORKING-STORAGE SECTION. | | EXEC SQL BEGIN DECLARE SECTION END-EXEC. | | 01 SQLSTATE GLOBAL PIC X(5). *複数の入 | | 01 SQLMSG GLOBAL PIC X(255). *れ子プロ | | (2) |グラムで | | 01 COMMON1 GLOBAL PIC S9(9) BINARY. *有効 | | 〜 | | EXEC SQL END DECLARE SECTION END-EXEC. | | PROCEDURE DIVISION. | | 〜 | | (1) | | EXEC SQL DECLARE CUR1 CURSOR *複数の入 | | FOR SELECT … *れ子プロ | | WHERE NUMBER= :COMMON1 END-EXEC. |グラムで | | (2) *有効 | | 〜 | | EXEC SQL OPEN CUR1 END-EXEC. | | 〜 (1) | |*―――――――――――――(プログラムSAMPLE02)―――――――――*| ||IDENTIFICATION DIVISION. || ||PROGRAM-ID. SAMPLE02. || ||PROCEDURE DIVISION. || || 〜 || || EXEC SQL OPEN CUR1 END-EXEC. || || 〜 (1) || ||END PROGRAM SAMPLE02. || |*―――――――――――――――――――――――――――――――――*| | END PROGRAM SAMPLE01. | *―――――――――――――――――――――――――――――――――――*(1) プログラム“SAMPLE01”、“SAMPLE02”で共通に使うカーソル名
(2) プログラム“SAMPLE01”、“SAMPLE02”で共通に使うホスト変数
目次
索引
![]() ![]() |