10.7 埋め込みSQL文の解析方法
COBOLソースファイルに埋め込みSQL文がある場合に,COBOLソース解析のSQL表の解析方法について説明します。
解析対象のSQL文
解析できるのは,ODBC標準のSQL構文だけです。OracleまたはHiRDBにアクセスするSQL文がCOBOLソースファイルに含まれている場合は,コンパイルエラーになります。
COBOLソース解析では,抽出キーから表名やカーソル名の情報を取得してSQL文を解析します。エラー処理はありません。また,解析結果の妥当性や,予約語であるかどうかはチェックしません。
COBOLソース解析で解析対象になる埋め込みSQL文は,次に示す形式です。
EXEC SQL SQL文 END-EXEC
COBOLソース解析で解析対象になる埋め込みSQL文の形式を次の表に示します。
種類 |
分類 |
SQL文 |
説明 |
COBOLソース解析の対象 |
抽出情報(抽出キー) |
CRUD |
---|---|---|---|---|---|---|
宣言系 |
埋め込みSQL宣言節 |
BEGIN DECLARE SECTION |
埋め込みSQL開始宣言 |
× |
− |
− |
END DECLARE SECTION |
埋め込みSQL終了宣言 |
× |
− |
− |
||
埋め込み例外宣言 |
WHENEVER |
埋め込み例外宣言 |
× |
− |
− |
|
カーソル |
DECLARE CURSOR |
カーソル宣言 |
○ |
カーソル名(DECLARE), 表名(SELECT) |
R |
|
制御系 |
コネクション |
CONNECT |
コネクションの確立 |
× |
− |
− |
DISCONNECT |
コネクションの解除 |
× |
− |
− |
||
SET CONNECTION |
コネクションの変更 |
× |
− |
− |
||
トランザクション |
COMMIT |
コミットでのトランザクションの終了 |
× |
− |
− |
|
ROLLBACK |
ロールバックでのトランザクションの終了 |
× |
− |
− |
||
操作系 |
静的 |
SELECT |
表から指定した行の値の取り出し |
○ |
表名(SELECT) |
R |
INSERT |
表に新しい行を挿入 |
○ |
表名(INSERT [,SELECT]) |
C[+R] |
||
DELETE |
表の行の削除 |
○ |
表名(DELETE [,SELECT]) |
[R+]D |
||
UPDATE |
表の行の更新 |
○ |
表名(UPDATE [,SELECT]) |
[R+]U |
||
カーソル |
OPEN |
カーソルのオープン |
× |
− |
− |
|
FETCH |
カーソルを表の次の行に位置づけ,その行の取り出し |
○ |
カーソル名, 表名(FETCH) |
R |
||
CLOSE |
カーソルのクローズ |
× |
− |
− |
||
ストアドプロシージャ |
CALL |
ストアドプロシージャの呼び出し |
× |
− |
− |
|
動的 |
EXECUTE IMMEDIATE |
動的SQLを準備し実行 |
× |
− |
− |
|
PREPARE |
動的SQLの準備 |
× |
− |
− |
||
DEALLOCATE PREPARE |
準備した動的SQLの解放 |
× |
− |
− |
||
EXECUTE |
動的SQLの実行 |
× |
− |
− |
表名を抽出する対象になるSQL文
COBOLソース解析では,埋め込みSQL文(EXEC SQLからEND-EXECまでのSQL文)について,次のSQL文に指定された表名を抽出します。
-
SELECT文
-
UPDATE/DELETE文
-
INSERT文
-
DECLARE CURSOR文
SQL文に関連するソース解析情報
SQL文に関連するソース解析情報を次の表に示します。
項番 |
ソース解析情報 |
項目名と表示する値 |
|
---|---|---|---|
1 |
表(DB)一覧 |
表名 |
|
CRUD |
○/空白 |
||
2 |
表(DB)詳細 |
表名 |
|
CRUD |
数字 |
||
3 |
プログラム詳細の表(DB)一覧 |
表名 |
|
CRUD |
○/空白 |
||
4 |
セクション階層図 |
表名 |
|
アクセス種別(表) |
C/R/U/Dの組み合わせ※ |
||
5 |
プログラム階層図 |
表名 |
|
アクセス種別(表) |
C/R/U/Dの組み合わせ※ |
||
6 |
表(DB)参照関係CSV |
表名1 表名2…表名n |
|
CRUD |
C/R/U/Dの組み合わせ※ |
表名を呼び出すときのモードのパターン
表名を呼び出すときのモードのCRUDパターンを次の表に示します。
項番 |
CRUDパターン |
COBOLソースファイル内のSQL文の発行例 |
---|---|---|
1 |
C |
INSERT INTO T1(C1,C2) VALUES(1,2) DECLARE CR1 CURSOR FOR SELECT C1,C2 FROM T1 |
2 |
R |
SELECT * FROM T1 SELECT COUNT(*) FROM (SELECT C1 FROM T1 UNION SELECT C1 FROM T2) |
3 |
U |
UPDATE T1 SET C1 = 100 WHERE C2 = '3' |
4 |
D |
DELETE FROM T1 WHERE C1 = '3' |
5 |
CR |
追加の副問合せ指定例 INSERT INTO T1(C1,C2) VALUES((SELECT MIN(C1) FROM T1),NULL) 別表からの追加例 INSERT INTO T1 SELECT * FROM T2 |
6 |
RU |
更新の副問合せ指定例 UPDATE T1 SET C1=NULL WHERE C1=(SELECT MIN(C1) FROM T2) |
7 |
RD |
削除の副問合せ指定例 DELETE FROM T1 WHERE C1=(SELECT MIN(C1) FROM T2) |