サンプルプログラム集: トランザクションとロックの2

Magic初心者の方は、これは見ない方が良いかもしれません。
中級者向けだと考えてください。

トランザクション開始についての理解を深めるためのものです。
データベースとして、MSSQLを使っています。
必要な設定は事前にしておいてください。

Magic uniPaaS V1SP1b で作成しています。

ダウンロード

何がどうなっているのかは自力で考えてください。
ですが、以下、簡単にプログラム内容を記載しておきます。

プログラム#3「照会 - Test001」は結果の確認用です。
下位のプログラムを実行すると、ほとんどの場合、レコードが1件作成されます。
内容の確認を終えたら、レコードを削除しておきます。

プログラム#5「バッチ1:レコード作成」を実行するとレコードが1件作成されます。
 →Col01の値が「1」になります。
プログラム#6「バッチ2:Col2更新」を実行すると上記で作成されたレコードが更新されます。
 →Col02の値が「111」になります。
プログラム#7「バッチ3:Col3更新&Rollback」を実行すると上記で作成されたレコードのCol03を更新しようとしますが、タスク後処理でロールバックするので、最終的には、更新はキャンセルされ、タスク開始時の値に戻ります。

プログラム#9「照会リンク&トランなし」は、照会リンクを使っていますが、タスク特性のトランザクション開始は「なし」になっています。
従って、このタスクでは、トランザクションは開始されません。

プログラム#10「テーブルなし&トランあり」は、テーブルを何も使っていません。
つまり、このタスクのデータビューは白紙状態です。
しかし、タスク特性のトランザクション開始は「タスク前の前」にしています。
このタスクを単体で実行した場合は、トランザクションは開始しませんが、上記のプログラム#9との組み合わせで使うと、このタスクでトランザクションが開始されます。
その実験が、プログラム#12以下です。

ロールバックプログラム#12〜#15では、プログラム#5〜#7をコールして、レコードを作成し、それを更新するという動作になります。
実行した後、プログラム#3で結果を確認してください。
実行途中に、ロールバックの確認画面が出ますが、これは「はい」を選択して進んでください。

この中で、唯一、プログラム#14「9→10→(5,6,7)」だけ、レコードが作成されません。
プログラム#7のロールバックが、プログラム#5や#6にも効いてしまうためです。
ここでのトランザクション開始は、プログラム#14の子タスクの「タスク前の前」となります。
これが、トランザクション開始が有効になる条件で説明していることです。