Você está na página 1de 6

Centro Universitário UNIFACISA

CESED – Centro de Ensino Superior e Desenvolvimento

Sistemas de Informação

Período: 2022.2

Docente: Herriot Fernandes

Disciplina: Banco de Dados II

Discente: Maria Geovana Gonçalo de Oliveira

Lista 9 – Funções até Hints

1. CREATE FUNCTION questao1(Matri INT, NovoSalario NUMERIC(10,2)

RETURNS TEXT AS $$

DECLARE MatMed INT;

DECLARE SalarioAntigo NUMERIC(10,2);

BEGIN

SELECT COUNT(*)

INTO MatMed

FROM Medico m

WHERE m.MatMed = Matri;

SELECT f.Salario

INTO SalarioAntigo
FROM Funcionario f

WHERE m.Matricula = Matri;

IF MatMed = 1 THEN

BEGIN

IF NovoSalario > m.Salario THEN

BEGIN

IF NovoSalario <= 10000 THEN

BEGIN

UPDATE Funcionario

SET f.Salario = NovoSalario

WHERE f.Matricula = Matri;

RETURN ‘Mudança salarial concedida.’;

END;

ELSE

BEGIN

RAISE EXCEPTION ‘O salário % é maior que o


permitido.’, NovoSalario USING HINT = ‘Use
salários menores que R$10.000,00.’;

RETURN ‘Salário inválido.’;

END;

END IF;

END;

ELSE

BEGIN
RAISE EXCEPTION ‘Salário anterior era de %’,
SalarioAntigo;

RETURN ‘Erro ao atualizar salário.’;

END;

END IF;

END;

ELSE

BEGIN

IF NovoSalario > m.Salario THEN

BEGIN

IF NovoSalario <= 3000 THEN

BEGIN

UPDATE Funcionario

SET f.Salario = NovoSalario

WHERE f.Matricula = Matri;

RETURN ‘Mudança salarial concedida.’;

END;

ELSE

BEGIN

RAISE EXCEPTION ‘O salário % é maior que o


permitido.’, NovoSalario USING HINT = ‘Use
salários menores que R$3.000,00’.;

RETURN ‘Salário inválido.’;

END;

END IF;

END;
ELSE

BEGIN

RAISE EXCEPTION ‘Salário anterior era de %’,


SalarioAntigo;

RETURN ‘Erro ao atualizar salário.’;

END;

END;

END IF;

END;

$$ LANGUAGE plpgsql;

2. CREATE FUNCTION questao2(INT, INT, OUT NUMERIC(10,2)) AS $$

DECLARE MatMed ALIAS FOR $1;

DECLARE MatAdm ALIAS FOR $2;

DECLARE QtdGanha ALIAS FOR $3;

BEGIN

SELECT t.SomaValor

INTO QtdGanha

FROM Totalizacao t

WHERE AMat = MatAdm

AND MMat = MatMed;

IF QtdGanha <= 10000 THEN

RAISE NOTICE ‘Poucos negociantes.’;

ELSIF QtdGanha <= 50000 THEN


RAISE NOTICE ‘Negociadores regulares.’;

ELSE

RAISE NOTICE ‘Excelentes negociadores.’;

END IF;

END;

$$ LANGUAGE plpgsql;

3. CREATE FUNCTION questao3(MatMed INT, MatAdm INT, Valor


NUMERIC(10,2))

RETURNS NUMERIC(10,2) AS $$

DECLARE PrecoEsp NUMERIC(10,2);

DECLARE QtdConsultas INT;

DECLARE Faturado NUMERIC(10,2)

BEGIN;

SELECT e.Preco

INTO PrecoEsp

FROM Especialidade e, Medico m

WHERE e.Registro = m.RegEsp

AND m.MatriMed = MatMed;

IF Valor = PrecoEsp THEN

BEGIN

UPDATE Totalizacao t

SET t.SomaValor = SomaValor + Valor

WHERE t.AMat = MatAdm


AND t.MMat = MatMed;

SELECT t.SomaValor

INTO Faturado

WHERE t.AMat = MatAdm

AND t.MMat = MatMed;

RETURN Faturado;

END;

ELSE

BEGIN

RAISE EXCEPTION ‘O valor % é diferente do valor %’, Valor,


PrecoEsp;

RETURN -1;

END;

END IF;

SELECT COUNT(*)

INTO QtdConsultas

FROM Totalizacao

WHERE t.AMat = MatAdm

AND t.MMat = MatMed;

RAISE NOTICE ‘Quantidade de consultas: %’, QtdConsultas;

END;

$$ LANGUAGE plpgsql;

Você também pode gostar