Consultas, Triggers e Procedimentos em SQL: Guia Prático

Classificado em Inglês

Escrito em em português com um tamanho de 2,82 KB

1. Visão com informações dos jogos

Faça uma visão para listar as seguintes informações de cada jogo: nome do time mandante, nome do time visitante e nome do estádio.

Create view A AS SELECT T1.Nome AS 'Time M', T2.Nome AS 'Time V', E.Nome AS 'Estadio' FROM Jogo J
INNER JOIN Time T1 ON J.Time_mandante = T1.IdTime
INNER JOIN Time T2 ON J.Time_visitante = T2.IdTime
INNER JOIN Estadio E ON J.Estadio_IdEstadio = E.IdEstadio;

2. Trigger de log de alteração de time do jogador

Considere a tabela Log abaixo. A cada alteração de time de um jogador, deve-se guardar as informações necessárias nesta tabela automaticamente.

CREATE TRIGGER T1 ON Jogador FOR UPDATE AS
BEGIN
DECLARE @n VARCHAR(30);
DECLARE @TN INT, @TA INT;
SET @n = (SELECT Nome FROM Inserted);
SET @TN = (SELECT Time_IdTime FROM Inserted);
SET @TA = (SELECT Time_IdTime FROM Deleted);
INSERT INTO Log VALUES (@n, @TN, @TA);
END

3. Procedimento para gerar relatório de jogadores

Faça um procedimento capaz de gerar o seguinte relatório (exemplo: <jogador>).

CREATE PROCEDURE P_Jogador AS
BEGIN
DECLARE c CURSOR STATIC FOR
SELECT j.Nome AS 'Nome Jogador', t.Nome AS 'Nome Time'
FROM Jogador j
INNER JOIN Time t ON t.IdTime = j.Time_IdTime;
OPEN c;
DECLARE @nomeJog VARCHAR(45), @nomeTime VARCHAR(45);
FETCH NEXT FROM c INTO @nomeJog, @nomeTime;
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT '<jogador>';
PRINT '<nome>' + @nomeJog + '</nome>';
PRINT '<nomeTime>' + @nomeTime + '</nomeTime>';
PRINT '</jogador>';
FETCH NEXT FROM c INTO @nomeJog, @nomeTime;
END
CLOSE c;
DEALLOCATE c;
END

4. Explicação dos conceitos

  • @@FETCH_STATUS: variável que indica a existência de uma próxima tupla para a consulta.
  • @var: variável criada pelo usuário.
  • SET: comando para atribuição de valor a uma variável.
  • CURSOR STATIC: criação de cursor do tipo static.
  • CREATE VIEW A AS SELECT * FROM B: criação de uma visão de nome A que consulta B.
  • CREATE TRIGGER A ON A FOR INSERT: criação de gatilho de nome A, para a tabela A, executado após uma inserção na tabela.
  • DEALLOCATE: desaloca o cursor da memória.

5. Trigger que impede a exclusão de corridas

Crie uma trigger que impeça que uma corrida seja apagada do banco de dados.

CREATE TRIGGER T_NDelCorrida ON Corrida INSTEAD OF DELETE AS
BEGIN
RAISERROR('Não é permitido deletar corridas.', 16, 1);
END
GO

Entradas relacionadas: