- Crie um procedure que receba um número e calcule a tabuada.
DECLARE @NUMERO_TABUADA INT,
@RESULTADO INT,
@LINHA INT
SET @NUMERO_TABUADA = 1
SELECT 'TABUADA DO ' + CONVERT(VARCHAR(15),@NUMERO_TABUADA) + ';'
SET @LINHA = 1
WHILE @LINHA <= 10
BEGIN
SET @RESULTADO = @NUMERO_TABUADA * @LINHA
SELECT CAST(@NUMERO_TABUADA AS VARCHAR(2))+ ' X ' +
CAST(@LINHA AS VARCHAR(2)) + ' = ' +
CAST(@RESULTADO AS VARCHAR(2)) AS 'TABUADA'
SET @LINHA = @LINHA + 1
END
2. Agora incremente a procedure do exercício 1 para que ela receba dois números, a tabuada inicial e a tabuada final. Ou seja, se ele passar como números 1 e 3 a procedure deverá mostrar a tabuada do números 1,2 e 3.
DECLARE @CALC1 INT, @CALC2 INT
DECLARE @NUM1 VARCHAR(500), @NUM2 VARCHAR(500) , @RESTO VARCHAR(500), @LINHA NVARCHAR(500)
SET @CALC1 = 1
WHILE @CALC1 <= 3 -- AQUI
BEGIN
SET @LINHA = @CALC1
SELECT 'TABUADA DO ' + CONVERT(VARCHAR(15),@LINHA) + ' ;'
SET @CALC2 = 1
WHILE @CALC2 <= 10 --
BEGIN
SET @NUM1 = @CALC1
SET @NUM2 = @CALC2
SET @RESTO = @CALC1 * @CALC2
SELECT @NUM1 + 'X' + @NUM2 + ' = ' + @RESTO AS 'TABUADA'
SET @CALC2 = @CALC2 + 1
END
SET @CALC1 = @CALC1 + 1
END
3. Crie um CRUD Create (Criar), Read (Ler), Update (Atualizar) e Delete (Apagar) no banco de dados MinhaCaixa para a tabela Clientes. Um parâmetro CRUD definindo a operação deverá ser passado, I,S,U e D. (Insert, Select, Update e Delete).
CREATE OR ALTER PROCEDURE CRUD_Clientes
(
@ClienteCodigo INT = NULL,
@ClienteNome varchar(50) = NULL,
@CRUD CHAR(1)
)
AS
BEGIN
IF @CRUD = 'C' AND @ClienteNome IS NOT NULL
BEGIN
INSERT Clientes (ClienteNome) VALUES (@ClienteNome)
SELECT 'CADASTRO REALIZADO COM SUCESSO:' AS MENSAGEM, ClienteCodigo, ClienteNome
FROM Clientes where ClienteCodigo = @@IDENTITY
END
ELSE
IF @CRUD = 'R' AND @ClienteCodigo IS NOT NULL
BEGIN
SELECT * FROM Clientes WHERE ClienteCodigo = @ClienteCodigo
END
ELSE
IF @CRUD = 'U' AND @ClienteCodigo IS NOT NULL AND @ClienteNome IS NOT NULL
BEGIN
update Clientes set ClienteNome = @ClienteNome
where ClienteCodigo = @ClienteCodigo
SELECT 'CADASTRO ATUALIZADO COM SUCESSO:' AS MENSAGEM,
ClienteCodigo, ClienteNome
FROM Clientes where ClienteCodigo = @ClienteCodigo
END
ELSE
IF @CRUD = 'D' AND @ClienteCodigo IS NOT NULL
BEGIN
DELETE FROM Clientes WHERE ClienteCodigo = @ClienteCodigo
SELECT 'REGISTRO NÃO ENCONTRADO NA BASE' as MENSAGEM
END
END
exec CRUD_Clientes @CRUD = 'C', @ClienteNome = 'Mario Sergio B-Kids'
exec CRUD_Clientes @CRUD = 'R', @ClienteCodigo = '2021'
exec CRUD_Clientes @CRUD = 'U', @ClienteCodigo = '2021' , @ClienteNome = 'Mario Sergio da CCAA'
exec CRUD_Clientes @CRUD = 'D', @ClienteCodigo = '2021'
4. Crie uma consulta SQL que apresente os nomes dos clientes, sua renda anual e seu total movimentado por ano. O objetivo do Banco é taxar os clientes que tiveram movimentação anual superior a R$ 100,00 em 5%, os que tiveram movimentação inferior ou igual a R$ 100,00 em 3% e os que tiveram movimentação inferior ou igual a R$ 50,00 em 2%.
OBS: Clientes com renda anual inferior a R$ 150.000,00 não devem ser taxado e nem clientes com movimentação anual total inferior a R$ 25,00.
Estrutura base da consulta, abaixo:
SELECT ClienteNome, MovimentoData, ClienteRendaAnual,
MovimentoValor
FROM Movimentos
inner join Contas on Movimentos.ContaNumero=Contas.ContaNumero
inner join Clientes on Clientes.ClienteCodigo=Contas.ClienteCodigo
O retorno da query usando o banco de dados MinhaCaixa deverá ser parecido com esse:

--Crie uma procedure que calcule quanto cada cleinte deve pagar de IOF
--(ou 3% ao ano)
SELECT ClienteNome as Nome, YEAR(MovimentoData) as Ano, ClienteRendaAnual,
SUM(MovimentoValor) Valor_Movimentado,
case when SUM(MovimentoValor) > 100 then SUM(MovimentoValor) * .05
when SUM(MovimentoValor) <= 100 then SUM(MovimentoValor) * .03
when SUM(MovimentoValor) <= 50 then SUM(MovimentoValor) * .02
end Valor_IOF,
case when SUM(MovimentoValor) > 100 then SUM(MovimentoValor) * .05 + SUM(MovimentoValor)
when SUM(MovimentoValor) <= 100 then SUM(MovimentoValor) * .03 +SUM(MovimentoValor)
when SUM(MovimentoValor) <= 50 then SUM(MovimentoValor) * .02 + SUM(MovimentoValor)
end Valor_Com_IOF
FROM Movimentos
inner join Contas on Movimentos.ContaNumero=Contas.ContaNumero
inner join Clientes on Clientes.ClienteCodigo=Contas.ClienteCodigo
where ClienteRendaAnual > 150000
GROUP BY ClienteNome, YEAR(MovimentoData),ClienteRendaAnual
HAVING SUM(MovimentoValor) > 50
order by ClienteNome, Ano