ページの先頭行へ戻る
Symfoware Server V10.0.0/V10.0.1 アプリケーション開発ガイド(埋込みSQL編)

3.2.2 SQL文の指定位置および指定順序

アプリケーション中に埋め込んで使用するSQL文には、実行文と非実行文があります。実行文は、データベースをアクセスしたり、トランザクションの制御を行うために使用します。非実行文は、実行文で利用するカーソルの宣言やホスト変数の宣言、例外条件発生時の動作を定義します。非実行文は、アプリケーションの実行対象にはなりません。したがって、アプリケーション中のGOTO文などによる制御の影響を受けません。

なお、SQL文の使用範囲については、“付録D SQL文の使用範囲”を参照してください。

SQL文の一覧を以下に示します。

表3.2 SQL文

分類

SQL文

備考

非カーソル系データ操作

単一行SELECT文

実行文

UPDATE文:探索

INSERT文

DELETE文:探索

カーソル系データ操作

カーソル宣言(DECLARE CURSOR)

非実行文

OPEN文

実行文

CLOSE文

FETCH文

UPDATE文:位置づけ

DELETE文:位置づけ

動的SQL文

ALLOCATE DESCRIPTOR文

実行文

DEALLOCATE DESCRIPTOR文

DESCRIPTOR取得文

DESCRIPTOR設定文

PREPARE文

DEALLOCATE PREPARE文

DESCRIBE文

EXECUTE文

EXECUTE IMMEDIATE文

動的カーソル宣言

非実行文

動的OPEN文

実行文

動的FETCH文

動的CLOSE文

動的DELETE文:位置づけ

動的UPDATE文:位置づけ

ストアドプロシジャ

CALL文

実行文

トランザクション制御文

COMMIT文

実行文

ROLLBACK文

SET TRANSACTION文

コネクション管理文

CONNECT文

実行文

SET CONNECTION文

DISCONNECT文

セション管理文

SET CATALOG文

実行文

SET SCHEMA文

SET SESSION AUTHORIZATION文

表宣言

表宣言

非実行文

埋込み例外宣言

WHENEVER文

非実行文

埋込みSQL宣言節

BEGIN DECLARE SECTION

非実行文

END DECLARE SECTION

資源操作文

RELEASE TABLE文

実行文

利用者制御文

SET USER PASSWORD文

実行文

アクセス制御文

SET ROLE文

実行文

SQL埋込みCOBOLプログラムでの、SQL文の指定位置について説明します。

埋込みSQL宣言節の指定位置

埋込みSQL宣言節は、ホスト変数を定義するためのものです。埋込みSQL宣言節は、DATA DIVISIONの作業場所節(WORKING-STORAGE SECTION)またはLINKAGE SECTIONに記述します。また、ホスト変数の変数名は、COBOLプログラムソース上で、“SQL”以外で始まる名前で命令し、一意にする必要があります。

ホスト変数の宣言

ホスト変数は、アプリケーションとデータベースの間でデータの受渡しをするのに使用する変数です。すなわち、アプリケーションで参照するデータをデータベースから取り出すため、または逆に、アプリケーションで設定したデータをデータベースに格納するために、SQL文に指定する変数です。

ホスト変数の宣言は、埋込みSQL宣言節で行います。宣言の記述方法そのものは、COBOLでの変数の宣言と同じです。ホスト変数の宣言の例を以下に示します。

図3.5 ホスト変数宣言の例(SQL埋込みCOBOLプログラム)

状態変数の宣言

状態変数は、処理結果の状態をアプリケーションに伝えるための変数です。状態変数には状態コードが設定されます。状態コードは、処理が正常に完了した、または処理中になんらかの例外条件が発生したという状態を表します。状態変数の変数名は“SQLSTATE”です。

SQLSTATEは長さ5桁の文字列型(01 SQLSTATE PIC X(5))の変数であり、埋込みSQL宣言節で宣言します。埋込みSQLを使用するアプリケーション中では、状態変数を必ず宣言します。

メッセージ変数の宣言

メッセージ変数は、処理結果をメッセージとしてアプリケーションに伝えるための変数です。メッセージ変数の変数名は“SQLMSG”です。

SQLMSGは固定長文字列型の変数であり、埋込みSQL宣言節で宣言します。メッセージ変数の宣言のしかたを以下に示します。

01 SQLMSG PIC X(n)

n:メッセージ変数の長さ(バイト数)です。

Windows1以上32692以下の値を指定します。

SolarisLinux1以上32000以下の値を指定します。

メッセージ変数にメッセージが設定される際の規則を以下に示します。

  • 設定されるメッセージは1つだけです。

  • メッセージの長さがメッセージ変数の長さ(n)を超える場合、メッセージの先頭からn文字分設定されます。

  • メッセージ変数のメッセージのうしろの領域は空白パディングされます。

カーソル宣言の指定位置

カーソル宣言は、PROCEDURE DIVISION節内に記述します。ただし、宣言したカーソル名を参照するカーソル系のSQL文よりソースファイル上で先行して記述します。なお、カーソル名は、COBOLプログラムソース上で一意にすることが必要です。

埋込み例外宣言の指定位置

埋込み例外宣言は、PROCEDURE DIVISIONに記述します。埋込み例外宣言の意味と有効範囲については、“3.2.4 SQL文の処理結果の確認”で説明します。

実行文の指定位置

データ操作文やトランザクション制御文などの実行文は、PROCEDURE DIVISIONに記述します。

INCLUDE文の指定位置

アプリケーション中にINCLUDE文を指定することができます。インクルードファイルには、SQL文およびCOBOLの言語テキストを記述できます。インクルードファイルに、ホスト変数および状態変数の宣言を格納しておくことにより、複数のアプリケーションで共通に使用する変数をまとめて宣言することができます。

INCLUDE文に指定するファイル名

INCLUDE文には、以下のファイル名を指定してください。

  • インクルードファイル名から拡張子“.COBOL”を除いたファイル名

  • インクルードファイル名

インクルードファイルの検索優先順位

INCLUDE文が指定された場合、インクルードファイルは、以下の順番に検索されます。

  1. 指定されたファイル名に、拡張子“.COBOL”を付加したファイル名

  2. 指定されたファイル名

表宣言

表宣言は、スキーマ名の修飾をしない表名を定義する宣言文です。表宣言で定義した表名を、それ以降のSQL文で記述する場合、スキーマ名を省略することができます。INCLUDE文と表宣言の例を以下に示します。

[インクルードファイル“HOSTVAR”]

01 SQLSTATE  PIC X(5).
01 STOCK     PIC S9(9) BINARY.

[SQL埋込みCOBOLプログラム]

EXEC SQL BEGIN DECLARE SECTION END-EXEC.
EXEC SQL INCLUDE HOSTVAR END-EXEC.
EXEC SQL END DECLARE SECTION END-EXEC. PROCEDURE DIVISION. EXEC SQL DECLARE 在庫表 TABLE ON SCH1 END-EXEC.
EXEC SQL SELECT 在庫数量 INTO :STOCK FROM 在庫表 WHERE 製品番号 = 240 END-EXEC. ↑ スキーマ名修飾省略 DISPLAY "在庫数量 = " STOCK. STOP RUN.