社内SEの徒然なる日記

NetCOBOLで複数のDBに接続したい! No4 DML文

■ DML文

今回は複数のデータベースに接続して、DML文を発行してみます。

1つのデータを、INSERT文で追加、UPDATE文で更新、DELETE文で削除します。処理的には動きますが、結果的には何も変わらない処理です。コミットしていないので、どちらにしても反映しませんけどね。

複数データベースに接続するとコード量が多くなるので、サンプルで接続するのは1つのデータベースにしています。

IDENTIFICATION                   DIVISION.
PROGRAM-ID. DBTEST00.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
DATA DIVISION.
*
WORKING-STORAGE SECTION.
EXEC SQL BEGIN DECLARE SECTION END-EXEC.
01 H-USERNAME PIC X(008).
01 H-PASSWD PIC X(008).
01 H-DBSTRING PIC X(003).
01 H-DBNAME PIC X(010).
*
EXEC SQL END DECLARE SECTION END-EXEC.
EXEC SQL INCLUDE SQLCA END-EXEC.
*
PROCEDURE DIVISION.
*
* Oracle接続文字列の設定

MOVE "user01" TO H-USERNAME.
MOVE "oracle" TO H-PASSWD.
MOVE "db1" TO H-DBSTRING.
MOVE "setu1" TO H-DBNAME.
*
* Oracle接続(DWH)

EXEC SQL
CONNECT :H-USERNAME IDENTIFIED BY :H-PASSWD
AT :H-DBNAME
USING :H-DBSTRING
END-EXEC.
*
* SQLCODEとメッセージを出力(エラー確認用)

DISPLAY "SQLCODE = "SQLCODE " [" SQLERRMC "]".
*
* INSERT文

EXEC SQL
AT :H-DBNAME
INSERT
INTO HST商品
(
商品CD
,商品名
)
VALUES (
'AAAAAA'
,'テスト'
)
END-EXEC.
*
* SQLCODEとメッセージを出力(エラー確認用)

DISPLAY "SQLCODE = "SQLCODE " [" SQLERRMC "]".
*
* UPDATE文

EXEC SQL
AT :H-DBNAME
UPDATE HST商品
SET 商品名 = '変更!'
WHERE 商品CD = 'AAAAAA'
END-EXEC.
*
* SQLCODEとメッセージを出力(エラー確認用)

DISPLAY "SQLCODE = "SQLCODE " [" SQLERRMC "]".
*
* DELETE文

EXEC SQL
AT :H-DBNAME
DELETE HST商品
WHERE 商品CD = 'AAAAAA'
END-EXEC.
*
* SQLCODEとメッセージを出力(エラー確認用)

DISPLAY "SQLCODE = "SQLCODE " [" SQLERRMC "]".
EXIT PROGRAM.


やることは前回までと同じで、EXEC SQL に続けて AT句 を書くだけです。

■ 後書き

なお、コミットを発行しなかった場合は自動的にロールバックが実行されます。なので書かなくても動きますが、作法として良くないので書いた方が良いと思います。

ただ、トランザクションの話は後の記事で書くので、ここまでのサンプルソースでは敢えて書いていません。

次回は、いよいよ複数のデータベースに接続してみます。

前回:NetCOBOLで複数のDBに接続したい! No3 SELECT文
次回:NetCOBOLで複数のDBに接続したい! No5 接続(複数)

投稿記事の一覧:http://harikofu.web.fc2.com/

--- blog end --- スポンサードリンク

PageTop

コメント


管理者にだけ表示を許可する