Advertisement
xickoh

Trigger Movimentos

Jun 16th, 2018
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.28 KB | None | 0 0
  1. CREATE TRIGGER updateArmazem
  2. ON Movimentos
  3. FOR INSERT
  4. AS
  5. BEGIN
  6. declare @origem CHAR(10);
  7. declare @destino CHAR(10);
  8. declare @idArt int;
  9. declare @quantidade int;
  10.  
  11. SELECT @origem=i.origem, @destino=i.destino, @idArt=i.idArtigo, @quantidade=i.quantidade from inserted i;
  12.  
  13. IF NOT (@origem LIKE 'fornecedor' AND @destino LIKE 'loja') OR (@destino LIKE 'fornecedor')
  14. BEGIN
  15.  
  16. IF @origem LIKE 'loja'
  17. BEGIN
  18.  
  19. IF NOT EXISTS (SELECT * FROM armazem a WHERE idArt = @idArt AND a.seccao = 'defeito')
  20. BEGIN
  21. INSERT INTO armazem (idArt, quantidade, seccao) VALUES (@idArt, @quantidade, 'defeito');
  22. END
  23.  
  24. ELSE
  25. BEGIN
  26. declare @quantidadeEscaparate int;
  27. SELECT @quantidadeEscaparate=e.quantidade FROM Escaparate e WHERE idArtigo = @idArt;
  28.  
  29. IF @quantidade <= @quantidadeEscaparate
  30. BEGIN
  31. UPDATE Armazem
  32. SET quantidade = quantidade + @quantidade
  33. WHERE idArt = @idArt AND seccao = 'defeito';
  34.  
  35. UPDATE Escaparate
  36. SET quantidade = quantidade - @quantidade
  37. WHERE idArtigo = @idArt;
  38.  
  39. END
  40. ELSE
  41. BEGIN
  42. Print 'Quantidade não existente em loja';
  43. ROLLBACK TRANSACTION
  44. END
  45. END
  46.  
  47. END
  48. ELSE IF @origem LIKE 'fornecedor'
  49. BEGIN
  50.  
  51. IF NOT EXISTS (SELECT * FROM armazem a WHERE idArt = @idArt AND a.seccao = 'reposicao')
  52. BEGIN
  53. INSERT INTO armazem (idArt, quantidade, seccao) VALUES (@idArt, @quantidade, 'reposicao');
  54. END
  55.  
  56. ELSE
  57. BEGIN
  58. UPDATE Armazem
  59. SET quantidade = quantidade + @quantidade
  60. WHERE idArt = @idArt AND seccao = 'reposicao';
  61.  
  62. END
  63.  
  64. END
  65.  
  66. ELSE IF @origem LIKE 'armazem'
  67. BEGIN
  68.  
  69. declare @quantidadeArmazem int;
  70. SELECT @quantidadeArmazem=quantidade FROM armazem a WHERE a.idArt = @idArt AND a.seccao = 'reposicao';
  71.  
  72. IF @quantidadeArmazem >= @quantidade
  73. BEGIN
  74.  
  75. UPDATE Escaparate
  76. SET quantidade = quantidade + @quantidade
  77. WHERE idArtigo = @idArt;
  78.  
  79. UPDATE Armazem
  80. SET quantidade = quantidade - @quantidade
  81. WHERE idArt = @idArt;
  82.  
  83. END
  84.  
  85. ELSE
  86. BEGIN
  87. Print 'Quantidade não existente em armazém';
  88. ROLLBACK TRANSACTION
  89. END
  90.  
  91. END
  92. END
  93. ELSE
  94. BEGIN
  95. Print 'Operação Inválida';
  96. ROLLBACK TRANSACTION
  97. END
  98.  
  99. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement