Tạo stored procedure sp_PayoutTwo với 5 tham số: from_acc (INT), to1 (INT), amt1 (DECIMAL(18,2)), to2 (INT), amt2 (DECIMAL(18,2)).
Procedure thực hiện hai khoản chi liên tiếp từ cùng một tài khoản nguồn trong một transaction, giả định các tài khoản đều tồn tại và hợp lệ:
amt1 khỏi from_acc, cộng amt1 vào to1. Nếu sau bước 1 số dư from_acc < 0 → ROLLBACK toàn bộ rồi thoát.amt2 khỏi from_acc, cộng amt2 vào to2. Nếu sau bước 2 số dư from_acc < 0 → chỉ hoàn nguyên về SAVEPOINT (bước 1 vẫn được giữ).COMMIT.SAVE TRANSACTION tên; ... ROLLBACK TRANSACTION tên;SAVEPOINT tên; ... ROLLBACK TO SAVEPOINT tên;Số dư đúng bằng 0 là hợp lệ. Hệ thống chấm gọi procedure 3 lần liên tiếp với from_acc = 1, to1 = 2, to2 = 3 (số tiền lần lượt 30tr+30tr, 5tr+5tr, 5tr+1tr) rồi in account_id, balance của tài khoản 1, 2, 3.
Bảng Accounts(account_id, balance).
account_id, balance (TAB) của tài khoản 1, 2, 3.
Ví dụ:
Đầu vào:
Đầu ra:
1 2000000.00
2 43000000.00
3 62000000.00
Giải thích:
Đang tải editor...