09.Triggers and Transactions_Problem_5
CREATE PROCEDURE usp_TransferMoney(@SenderId INT, @ReceiverId INT, @Amount DECIMAL(15,4))
AS
BEGIN
BEGIN TRANSACTION
EXEC dbo.usp_WithdrawMoney @SenderId, @Amount
EXEC dbo.usp_DepositMoney @ReceiverId, @Amount
COMMIT
END
Това решение минава в Judge, но не трябва! задача 5:
Write stored procedure usp_TransferMoney(SenderId, ReceiverId, Amount) that transfers money from one account to another. Make sure to guarantee valid positive MoneyAmount with precision up to fourth sign after decimal point. Make sure that the whole procedure passes without errors and if error occurs make no change in the database. You can use both: “usp_DepositMoney”, “usp_WithdrawMoney” (look at previous two problems about those procedures).
Как да проверявам дали е минал WithdrawMoney или DepositMoney ? Може би с IF(@@ROWCOUNT <> 1).
И може ли да се направи ROLLBACK на nested процедурата? Идеята е да се използват процедурите, но ако са неуспешни да се ROLLBACK .
Ако изтеглим пари от @SenderId, но @ReceiverId не съществува, не може да се откаже процедурата за теглене.