Advertisement
Guest User

Untitled

a guest
Oct 1st, 2014
185
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 1.39 KB | None | 0 0
  1. GO
  2. CREATE PROCEDURE SPMoveMoney (
  3.     @user_id INT,
  4.     @from_acc INT,
  5.     @to_acc INT,
  6.     @amount MONEY,
  7.     @STATUS INT OUTPUT
  8. ) AS
  9. BEGIN
  10.     BEGIN TRANSACTION
  11.    
  12.     DECLARE @owner_of_acc_from AS INT
  13.     DECLARE @to_exist AS INT
  14.     DECLARE @has_money AS MONEY
  15.  
  16.     SET @owner_of_acc_from = (
  17.         SELECT COUNT(*) AS 'rows'
  18.         FROM Holder AS H
  19.         INNER JOIN HolderAccount AS HA
  20.             ON H.user_id = HA.user_id
  21.         INNER JOIN Account AS A
  22.             ON HA.acc_nr = A.acc_nr
  23.         WHERE H.user_id = @user_id AND A.acc_nr = @from_acc
  24.     )
  25.     -- no need to make it larger... or w/e
  26.     SET @has_money = (SELECT amount FROM Account WHERE acc_nr = @from_acc)
  27.  
  28.     SET @to_exist = (SELECT COUNT(*) FROM Account WHERE acc_nr = @to_acc)
  29.  
  30.     -- User has one account with "from" accountnr
  31.     IF @owner_of_acc_from > 0 BEGIN
  32.         IF @to_exist > 0 BEGIN
  33.             IF @has_money >= @amount BEGIN
  34.                
  35.                 UPDATE Account
  36.                 SET amount = amount + @amount
  37.                 WHERE acc_nr = @to_acc
  38.                
  39.                 INSERT INTO Log (user_id, from_acc, to_acc, amount, DATE)
  40.                 VALUES (@user_id, @from_acc, @to_acc, @amount, GETDATE());
  41.  
  42.                 -- 0: Everything went through
  43.                 SET @STATUS = 0
  44.                 COMMIT TRANSACTION
  45.             END ELSE BEGIN
  46.                 -- 2: From account didn't have enough money
  47.                 SET @STATUS = 2
  48.                 ROLLBACK TRANSACTION
  49.         END
  50.     END  
  51.     END ELSE BEGIN
  52.         -- 1: User id didn't own account or the account didn't exist
  53.         SET @STATUS = 1
  54.         ROLLBACK TRANSACTION
  55.     END
  56. END
  57. GO
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement