Symfoware Parallel Server RDBユーザーズガイド 応用プログラム開発編
目次 索引 前ページ次ページ

第2章 データベースを処理する応用プログラムの開発の概要> 2.2 SQL埋込みCOBOLプログラムの作成方法

2.2.7 名前の一意性と有効範囲

ここでは、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”で共通に使うホスト変数


目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 2006