SQL Server Procedures, Functions, Cursors, Transactions and Triggers

Classified in Technology

Written on in English with a size of 4.28 KB

-------- -------- -------- PROCEDURE / TABELA TEMPORÁRIA -------- -------- ---

CREATE PROCEDURE sp_Temporario2 AS
BEGIN
   SELECT * INTO #tab_temporaria FROM Veiculo
   UPDATE #tab_temporaria SET vlDiaria = vlDiaria * 1.20
   SELECT cdTipo, AVG(vlDiaria) FROM #tab_temporaria
   GROUP BY cdTipo
END
EXEC sp_Temporario2

----- -------- -------- PROCEDURE / OUTPUT -------- -------- -------- -------- --------

CREATE PROCEDURE sp_VeiculosDisponiveisMed(@saida INT OUTPUT) AS
BEGIN
   SELECT COUNT(*) FROM Veiculo V WHERE cdLocacao IS NULL
END
DECLARE @saida2 INT
EXEC sp_VeiculosDisponiveisMed @saida2 OUTPUT
PRINT @saida2

-------- PROCEDURE / CURSOR -------- -------- -------- -------- --------

CREATE PROCEDURE SP_CALCULA(@MES INT)

AS

BEGIN

    CREATE TABLE #TABELA (COD_FUNC INT)

/* ************** CRIAÇÃO CURSOR ************** */

    -- VARIÁVEL QUE SERÁ UTILIZADA PELO CURSOR

    DECLARE @FUNCID INT

    -- CRIA CURSOR COMO DYNAMIC, LOCAL, FORWARD_ONLY

    DECLARE CURSOR_FUNCIONARIO CURSOR FOR

    -- INSTRUÇÃO SELECT

    SELECT FUNCID FROM FUNCIONARIOS

    -- ABERTURA DO CURSOR

    OPEN CURSOR_FUNCIONARIO

    -- VAI PARA O 1º REGISTRO E PREENCHE AS VARIÁVEIS CORRESPONDENTES

    FETCH NEXT FROM CURSOR_FUNCIONARIO
    INTO @FUNCID

    WHILE @@FETCH_STATUS = 0

    BEGIN

    -- DESENVOLVIMENTO DO CURSOR

    SET @NOME_FUNC = (SELECT FuncNome FROM Funcionarios WHERE FuncId = @FUNCID)

    INSERT INTO #TABELA (COD_FUNC) VALUES (@FUNCID)

    FETCH NEXT FROM CURSOR_FUNCIONARIO
    INTO @FUNCID

    END

    CLOSE CURSOR_FUNCIONARIO -- FECHA O CURSOR

    DEALLOCATE CURSOR_FUNCIONARIO -- DESALOCA O CURSOR DA MEMÓRIA

    SELECT * FROM #TABELA

END


-------- -------- -------- FUNCTION -------- -------- -------- -------- -------- --------

CREATE FUNCTION FNC_CALCULAIRRF(@ID_FUNC INT)
RETURNS MONEY
AS
BEGIN
    DECLARE @P_SALARIO MONEY
    SET @P_SALARIO = (SELECT)

    IF @P_SALARIO <> (SELECT TOP 1 VALORFINAL FROM IRRF)
    RETURN 0
    ELSE IF @P_SALARIO <> (SELECT)
    SET @PORC = (SELECT)
    ELSE
    SET @PORC = (SELECT)

    RETURN @DESC - @PARC
END


-------- -------- -------- TRANSACTION -------- -------- -------- -------- -------- --------

BEGIN TRANSACTION
UPDATE Midias SET DescMidia = '' WHERE CodMidia = 1
SELECT * FROM Midias
ROLLBACK TRANSACTION
------------------------------------------------------------

DECLARE @tran1 VARCHAR(15)
SET @tran1 = 'principal'
DECLARE @tran2 VARCHAR(15)
SET @tran2 = 'secundaria'
BEGIN TRANSACTION @tran1 -- transação principal
    INSERT INTO Genero VALUES (9, 'principal')
    BEGIN TRANSACTION @tran2 -- transação secundária
    INSERT INTO Genero VALUES (10, 'secundaria')
    COMMIT TRANSACTION @tran2 -- transação secundária
ROLLBACK TRANSACTION @tran1 -- transação principal

SELECT * FROM Genero
DELETE FROM Genero WHERE CodGenero IN (9,10)

-------- -------- -------- TRIGGER (DELETE / INSERT) -------- -------- -------- --------

CREATE TRIGGER TRG_excluirItemLocacao ON ItensLocacao
FOR DELETE AS -- (INSERT)*

BEGIN
    IF (SELECT COUNT(*) FROM deleted) > 0 -- (INSERTED)*
    BEGIN
    UPDATE Midias SET qtdEstoque = (qtdEstoque + 1) FROM Midias M
    INNER JOIN deleted D ON D.CodMidia = M.CodMidia
    WHERE M.CodMidia = D.CodMidia
    PRINT 'Locação excluída com sucesso'
    END
    ELSE
    BEGIN
    PRINT 'Não foi possível excluir locação'
    ROLLBACK TRANSACTION
    END
END

Related entries: