COBOL2002 ユーザーズガイド


23.1.1 埋め込みSQL文を使ったCOBOLプログラムの作成

埋め込みSQL文によるデータベースアクセスの方法は,SQLをCOBOLプログラム中に埋め込んで実行する方法(静的に行う方法)と,SQLを実行時に生成し,SQL文の埋め込み変数に設定して実行する方法(動的に行う方法)があります。

埋め込みSQL文のSELECT文は,表から1行分の値を取り出す文(SELECT文:単一行)です。複数行の値を取り出す場合は,カーソルを使用します。カーソルの使用には,静的に行う方法と動的に行う方法があります。また,ストアドプロシージャを呼び出して,一連の手続きを行う方法もあります。

〈この項の構成〉

(1) COBOLプログラムで使用できるSQL文

COBOLプログラムで使用できる埋め込みSQL文を次に示します。

表23‒1 COBOLプログラムで使用できる埋め込みSQL文

種類

分類

SQL文

内容

宣言系

埋め込みSQL宣言節

BEGIN DECLARE SECTION

埋め込みSQL開始宣言

END DECLARE SECTION

埋め込みSQL終了宣言

埋め込み例外宣言

WHENEVER

埋め込み例外宣言

カーソル

DECLARE CURSOR

カーソル宣言

制御系

コネクション

CONNECT

コネクションを確立する

DISCONNECT

コネクションを解除する

SET CONNECTION

現行コネクションを変更する

トランザクション

COMMIT

コミットでトランザクションを終了させる

ROLLBACK

ロールバックでトランザクションを終了させる

操作系

静的

SELECT

表の指定された行から値を取り出す

INSERT

表に新しい行を作成する

DELETE

表から行を削除する

UPDATE

表の行を更新する

カーソル

OPEN

カーソルを開く

FETCH

カーソルを表の次の行に位置づけ,その行を取り出す

CLOSE

カーソルを閉じる

ストアドプロシージャ

CALL

ストアドプロシージャを呼び出す

動的

EXECUTE IMMEDIATE

動的SQLを準備し,実行する

PREPARE

動的SQLを準備する

DEALLOCATE PREPARE

準備した動的SQLを解放する

EXECUTE

動的SQLを実行する

(2) 埋め込みSQL宣言節

埋め込みSQL開始宣言から埋め込みSQL終了宣言までを,埋め込みSQL宣言節といいます。埋め込みSQL宣言節は,データ部に定義します。

埋め込みSQL宣言節には,SQLCODE変数,埋め込み変数,および標識変数を定義します。

(3) 埋め込み例外宣言

埋め込み例外宣言は,宣言系以外のSQL文の実行後の例外処理を記述します。

(4) カーソル宣言

カーソル宣言は,OPEN文などでカーソルを使用する場合に,手続き部に定義します。カーソル宣言に誤りがあると,そのカーソル名に対するOPEN文の実行がエラーになります。

(5) 識別子

カーソル名,表名,列名,プロシージャ名などを表す識別子は,データベースによっても規定されます。したがって,正常にコンパイルされたプログラムでも,SQL文の実行が失敗することがあります。このような場合は,DBMSのマニュアルなどを参照してください。また,-EquivRuleコンパイラオプションの指定がない場合,等価規則が適用されます。等価規則については,マニュアル「COBOL2002 言語 標準仕様編」 「4.1.2 COBOL文字集合」を参照してください。

使用するデータベースを意識しないで運用したい場合は,カーソル名を英字で始まる18文字以内の文字列で定義することを推奨します。

(6) トランザクション

トランザクションは,コネクションを確立したとき,または明示的にコミットやロールバックしたときから開始され,明示的,または暗黙的にコミット,ロールバックしたときに終了されます。トランザクションは,コネクションごとに管理されます。

一つのデータベースに対して複数のプログラム(コネクション)からアクセスする場合,デッドロックが発生する可能性があります。デッドロックが発生する可能性を低くするために,プログラム作成時には次のことに注意してください。

(7) SQL文の実行順序

SQL文は,次に示す順序で実行する必要があります。

図23‒1 SQL文の実行順序

[図データ]

注※ 動的SQL文を使用する場合については,次に示す順序を参照してください。

図23‒2 動的SQL文の実行順序

[図データ]