1. 学ぶ
  2. /
  3. コース
  4. /
  5. PostgreSQL におけるトランザクションとエラー処理

Connected

演習

複数の例外ブロック

ROLLBACK TO と SAVEPOINT は、例外ハンドラーを含む関数内では使用できないため、入れ子のブロックを使って同様の動作を擬似的に実現します。これらの入れ子ブロックは、相互依存するステートメントを依存順にグループ化・整列させるために使います。ここでは、SAVEPOINT を模倣する例外ハンドラー付きのレコード挿入ブロックを作成し、その後に例外ハンドラー付きでレコードを更新します。その更新ステートメントはエラーになり、例外ハンドラーがそのブロックだけを自動的にロールバックします。

指示

100 XP
  • 最初のブロックでは、patients に次のレコードを EXCEPTION ハンドラー付きで挿入します。a1c=5.6, glucose=93, fasting=TRUE、(6.3, 111, TRUE)、(4.7, 65, TRUE)。失敗時は errors に msg として 'failed to insert' を挿入します。
  • 2つ目の入れ子ブロックを開き、ID が 1 の患者の fasting 値を 'true' に更新します。例外発生時は、errors テーブルに msg として 'Inserted string into boolean.' を記録します。
  • 両方のブロックを END します。