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