
■ 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 ---
スポンサードリンク


