COBOL2002 ユーザーズガイド
埋め込みSQL文によるデータベースアクセスの方法は,SQLをCOBOLプログラム中に埋め込んで実行する方法(静的に行う方法)と,SQLを実行時に生成し,SQL文の埋め込み変数に設定して実行する方法(動的に行う方法)があります。
埋め込みSQL文のSELECT文は,表から1行分の値を取り出す文(SELECT文:単一行)です。複数行の値を取り出す場合は,カーソルを使用します。カーソルの使用には,静的に行う方法と動的に行う方法があります。また,ストアドプロシージャを呼び出して,一連の手続きを行う方法もあります。
COBOLプログラムで使用できる埋め込みSQL文を次に示します。
表24-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を実行する |
埋め込みSQL開始宣言から埋め込みSQL終了宣言までを,埋め込みSQL宣言節といいます。埋め込みSQL宣言節は,データ部に定義します。
埋め込みSQL宣言節には,SQLCODE変数,埋め込み変数,および標識変数を定義します。
埋め込み例外宣言は,宣言系以外のSQL文の実行後の例外処理を記述します。
カーソル宣言は,OPEN文などでカーソルを使用する場合に,手続き部に定義します。カーソル宣言に誤りがあると,そのカーソル名に対するOPEN文の実行がエラーになります。
カーソル名,表名,列名,プロシージャ名などを表す識別子は,データベースによっても規定されます。したがって,正常にコンパイルされたプログラムでも,SQL文の実行が失敗することがあります。このような場合は,DBMSのマニュアルなどを参照してください。また,-EquivRuleコンパイラオプションの指定がない場合,等価規則が適用されます。等価規則については,マニュアル「COBOL2002 言語 標準仕様編 4.1.2 COBOL文字集合」を参照してください。
使用するデータベースを意識しないで運用したい場合は,カーソル名を英字で始まる18文字以内の文字列で定義することを推奨します。
トランザクションは,コネクションを確立したとき,または明示的にコミットやロールバックされたときから開始され,明示的,または暗黙的なコミット,ロールバックされたときに終了されます。トランザクションは,コネクションごとに管理されます。
一つのデータベースに対して複数のプログラム(コネクション)からアクセスする場合,デッドロックが発生する可能性があります。デッドロックが発生する可能性を低くするために,プログラム作成時には次のことに注意してください。
All Rights Reserved. Copyright (C) 2013, 2016, Hitachi, Ltd.
All Rights Reserved. Copyright (C) 2002, 2011, Microsoft Corporation.