Hitachi

COBOL2002 Professional Tool Kit COBOLソース解析ガイド


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文の形式を次の表に示します。

表10‒7 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の実行

×

(凡例)

○:COBOLソース解析の解析対象です。

×:COBOLソース解析の解析対象外です。

−:該当しません。

表名を抽出する対象になるSQL文

COBOLソース解析では,埋め込みSQL文(EXEC SQLからEND-EXECまでのSQL文)について,次のSQL文に指定された表名を抽出します。

SQL文に関連するソース解析情報

SQL文に関連するソース解析情報を次の表に示します。

表10‒8 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の組み合わせ

注※

表名を呼び出すときのモードです。次に示す4モードの組み合わせです。

C:INSERT

R:SELECT またはFETCH

U:UPDATE

D:DELETE

表の使用モードはC,R,U,Dの順序で出力します。

例えば,UPDATE文とSELECT文が定義されている場合,「RU」と出力します。

表名を呼び出すときのモードのパターン

表名を呼び出すときのモードのCRUDパターンを次の表に示します。

表10‒9 表名を呼び出すときのモードの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)