SQL Queries, Stored Procedures and Triggers for Project Management

Classified in Technology

Written on in English with a size of 3.42 KB

SQL Queries for Project Management

Query 1: Projects Delivered This Year or Without a Delivery Date

SELECT NomeP
FROM Projecto
INNER JOIN trabalha_em ON npr = nproj
WHERE DATEPART(year, Data_entrega) = DATEPART(year, SYSDATE)
OR data_entrega = NULL
ORDER BY total DESC;

Query 2: Employees Working Above Average Hours per Project

SELECT nomeP, nome, total_horas
FROM projecto
INNER JOIN trabalha_em t1 ON npr = nproj
INNER JOIN funcionario ON nemp = nf
WHERE total_horas > (SELECT AVG(total_horas)
FROM trabalha_em WHERE npt = t1.npt);

Query 3: Employees Earning More Than Their Supervisors

SELECT f.nome AS 'nome_funcionario', f.salario AS 'salario_funcionario', s.nome AS 'nome_supervisor', s.salario AS 'salario_supervisor'
FROM funcionario f
INNER JOIN funcionario s ON s.nemp = f.nsuperv
WHERE f.salario > s.salario;

Stored Procedure: addDays

CREATE PROCEDURE addDays(@np INT, @xdias INT)
AS
DECLARE @verificação VARCHAR(2);
SET @verificação = (SELECT estado FROM projecto WHERE nproj = @np);
IF (@verificação = 'E')
BEGIN
UPDATE projecto SET data_entrega = DATEADD(day, @xdias, data_entrega) WHERE nproj = @np;
PRINT 'Alteração feita com sucesso';
END
ELSE IF (@verificação = 'T')
BEGIN
PRINT 'Não foi possível fazer alteração, projecto em estado....';
END
ELSE
BEGIN
PRINT 'Não foi possível fazer alteração, projecto não encontrado';
END
EXEC addDays 3, 3;

Trigger: atualizaHoras

CREATE TRIGGER atualizaHoras
ON trabalha_em
AFTER UPDATE
AS
DECLARE @diferença INT;
SET @diferença = (SELECT total_horas FROM inserted) - (SELECT total_horas FROM deleted);
UPDATE funcionario SET totalhorastrabalho = totalhorastrabalho + (@diferença) WHERE nemp = (SELECT nf FROM inserted);

Stored Procedure: Project Cursor Report

CREATE PROCEDURE listaProjecto(@np INT)
AS
DECLARE c1 CURSOR FOR
SELECT nomeP, data_inicio, data_entrega, localizacao, estado, nome AS nomecli, nomef, total_horas
FROM cliente
INNER JOIN projecto ON ncliente = ncli
INNER JOIN trabalha_em ON npr = nproj
INNER JOIN funcionario ON nemp = nf;
DECLARE @nomeP VARCHAR(100), @dt DATE, @dt_e DATE, @l VARCHAR(100), @est VARCHAR(2), @nomecli VARCHAR(100), @nomef VARCHAR(100), @horas INT, @interação INT = 1;
OPEN c1;
FETCH FIRST FROM c1 INTO @nomeP, @dt, @dt_e, @l, @est, @nomecli, @nomef, @horas;
PRINT 'numeroProjecto: ' + CAST(@np AS VARCHAR);
PRINT 'nome: ' + @nomeP;
PRINT 'Cliente: ' + @nomecli;
PRINT 'Funcionário ' + CAST(@interação AS VARCHAR) + ': ' + @nomef + ' - horas: ' + CAST(@horas AS VARCHAR);
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM c1 INTO @nomeP, @dt, @dt_e, @l, @est, @nomecli, @nomef, @horas;
SET @interação = @interação + 1;
PRINT 'Funcionário ' + CAST(@interação AS VARCHAR) + ': ' + @nomef + ' - horas: ' + CAST(@horas AS VARCHAR);
END
CLOSE c1;
DEALLOCATE c1;

Related entries: