Advertisement
Kimossab

SIBD - S14.2

May 18th, 2015
338
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 2.77 KB | None | 0 0
  1. /*2*/
  2. /*2.1*/
  3. IF OBJECT_ID('TotDivida') IS NOT NULL
  4.     DROP FUNCTION TotDivida
  5. GO
  6. CREATE FUNCTION TotDivida ()
  7. RETURNS FLOAT
  8. BEGIN
  9.     RETURN (SELECT SUM(TotalFactura) FROM Facturas WHERE TotalFactura-Pagamento-Crédito > 0)
  10. END
  11.  
  12. PRINT 'Valor total da dívida: ' + CONVERT(VARCHAR, dbo.TotDivida())
  13.  
  14. /*2.2*/
  15. IF OBJECT_ID('fn_AplicaDesconto') IS NOT NULL
  16.     DROP FUNCTION fn_AplicaDesconto
  17. GO
  18. CREATE FUNCTION fn_AplicaDesconto (@valor FLOAT)
  19. RETURNS FLOAT
  20. BEGIN
  21.     IF @valor >= 5000
  22.         RETURN @valor * 0.9
  23.     IF @valor >= 500
  24.         RETURN @valor * 0.95
  25.     IF @valor >= 100
  26.         RETURN @valor * 0.98
  27.     RETURN @valor
  28. END
  29.  
  30. PRINT 'Valor 50.00 com desconto: ' + CONVERT(VARCHAR, dbo.fn_AplicaDesconto(50))
  31. PRINT 'Valor 100.00 com desconto: ' + CONVERT(VARCHAR, dbo.fn_AplicaDesconto(100))
  32. PRINT 'Valor 560.00 com desconto: ' + CONVERT(VARCHAR, dbo.fn_AplicaDesconto(560))
  33. PRINT 'Valor 10000.00 com desconto: ' + CONVERT(VARCHAR, dbo.fn_AplicaDesconto(10000))
  34.  
  35. /*2.3*/
  36. IF OBJECT_ID('fn_MelFunc') IS NOT NULL
  37.     DROP FUNCTION fn_MelFunc
  38. GO
  39. CREATE FUNCTION fn_MelFunc (@num INT)
  40. RETURNS @TableRet TABLE (Fornecedor INT, Nome VARCHAR(50), TotalFactura MONEY)
  41. BEGIN
  42.     INSERT @TableRet
  43.     SELECT TOP (@num)  Fornecedor, Nome, TotalFactura
  44.         FROM  Fornecedores JOIN Facturas
  45.             ON Fornecedor = IDFornecedor
  46.         ORDER BY TotalFactura DESC
  47.     RETURN
  48. END
  49.  
  50. SELECT * FROM dbo.fn_MelFunc(5)
  51.  
  52. /*2.4*/
  53. IF OBJECT_ID('fn_MelFunc') IS NOT NULL
  54.     DROP FUNCTION fn_MelFunc
  55. GO
  56. CREATE FUNCTION fn_MelFunc (@quant INT)
  57. RETURNS @TableForn TABLE (Nome VARCHAR(50), Cont INT, Soma MONEY)
  58. BEGIN
  59.     INSERT @TableForn
  60.     SELECT Nome, COUNT(*), SUM(TotalFactura)
  61.         FROM  Fornecedores JOIN Facturas
  62.             ON Fornecedor = IDFornecedor
  63.         GROUP BY Nome
  64.         HAVING COUNT(*) >= @quant
  65.     RETURN
  66. END
  67.  
  68. SELECT * FROM dbo.fn_MelFunc(3)
  69.  
  70. /*2.5*/
  71. IF OBJECT_ID('fn_MedFact') IS NOT NULL
  72.     DROP FUNCTION fn_MedFact
  73. GO
  74. CREATE FUNCTION fn_MedFact (@quant INT)
  75. RETURNS @TableMed TABLE (Forn INT, NomeF VARCHAR(50), DataMax DATE, MeD MONEY)
  76. BEGIN
  77.     INSERT @TableMed
  78.     SELECT DISTINCT TOP(@quant) IDFornecedor, Nome, MAX(DataFactura), AVG(TotalFactura)
  79.         FROM  Fornecedores JOIN Facturas
  80.             ON Fornecedor = IDFornecedor
  81.         GROUP BY IDFornecedor, Nome
  82.         ORDER BY AVG(TotalFactura) DESC
  83.     RETURN
  84. END
  85.  
  86. SELECT * FROM dbo.fn_MedFact(5)
  87.  
  88. /*2.6*/
  89. IF OBJECT_ID('fn_SepFrase') IS NOT NULL
  90.     DROP FUNCTION fn_SepFrase
  91. GO
  92. CREATE FUNCTION fn_SepFrase(@frase VARCHAR(150), @separador CHAR)
  93. RETURNS @TablePal TABLE (Palavra VARCHAR(50))
  94. BEGIN
  95.     DECLARE @INDEX INT = 1,@AUX INT = 1;
  96.     WHILE (charindex(@separador,@frase,@AUX) > 0)
  97.     BEGIN
  98.         SET @INDEX = charindex(@separador,@frase,@AUX)
  99.         INSERT @TablePal SELECT SUBSTRING(@frase, @AUX, @INDEX -@AUX)
  100.         SET @AUX = @INDEX
  101.     END
  102.     RETURN
  103. END
  104.  
  105. SELECT * FROM dbo.fn_SepFrase('91,12,65,78,56,789',',')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement