Pular para o conteúdo

Exercício Procedures

  1. 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