Prévia do material em texto
Campus:
RECREIO
Prova Impressa em 01/05/2020 por
RICARDO MENARTOWICZ
Prova Montada em 01/05/2020
1
Nome: CAIO ADLER GUEDES SACRAMENTO Matrícula: 201708265538
Disciplina: CCT0675 / LINGUAGEM PROCEDURAL PARA BANCO DE DADOS Data: / /
Período: 2020.1 / AV1 – 1a PARTE Turma: 3012
OBSERVAÇÕES:
Leia com atenção as questões antes de responder. Todas as respostas devem ser preenchidas em um arquivo e enviadas via SAVA até o dia 12/05.
A prova deve ser feita de forma individual e somente pelo próprio aluno. Todas as questões são discursivas.
Caso não haja a entrega no prazo estipulado a nota atribuída ao aluno para esta avaliação será 0 (zero).
Boa prova.
Utilize nas questões o seguinte modelo de dados:
A
Campus:
RECREIO
Prova Impressa em 01/05/2020 por
RICARDO MENARTOWICZ
Prova Montada em 01/05/2020
A
Campus:
RECREIO
Prova Impressa em 01/05/2020 por
RICARDO MENARTOWICZ
Prova Montada em 01/05/2020
de 1,25 1
de 1,25 2
de 1,25 3
de 1,25 4
Escreva um bloco anônimo para identificar quais produtos não possuem estoque suficiente para atender a todas as
vendas que estão cadastradas.
O bloco anônimo deverá imprimir na tela o código do produto (em ordem crescente), o nome do produto e a
quantidade que falta no estoque para atender as vendas deste produto.
Escreva um procedimento para calcular o valor de comissão que cada vendedor terá com base em suas vendas que
estão cadastradas e em seu percentual de comissão (tabela VENDEDOR, campo COMISSAO). O resultado deverá
ser gravado na tabela VENDEDOR, campo VALOR.
Escreva uma função que receba como parâmetro o código de um cliente e o código de um produto e retorne a
quantidade total que o cliente adquiriu daquele produto nas diversas vendas.
Escreva um trigger que verifique, durante o cadastro/alteração de uma venda, o seguinte:
1) O campo QUANTIDADE da tabela ITEMPRODUTO não pode ter casas decimais e deve ser maior ou igual a 1;
2) O campo VALOR da tabela ITEMPRODUTO deve ser maior que 0.
Quando as condições acima não forem atendidas, a transação deverá ser cancelada e uma das seguintes mensagens
de erro deverá ser exibida, respectivamente:
1) “A quantidade do produto não pode ser fracionada e deve ser maior ou igual a 1”;
2) “O valor do produto deve ser maior que 0”.
A
Campus:
RECREIO
Prova Impressa em 01/05/2020 por
RICARDO MENARTOWICZ
Prova Montada em 01/05/2020
1)
DECLARE
VAR_NOME PRODUTO.NOME%TYPE;
VAR_ESTOQUE PRODUTO.ESTOQUE%TYPE;
BEGIN
FOR PRODUTO IN (
SELECT
CODPRODUTO,
SUM(QUANTIDADE) TOTAL
FROM ITEMVENDA
GROUP BY CODPRODUTO
ORDER BY CODPRODUTO
)
LOOP
SELECT
NOME,
ESTOQUE
INTO
VAR_NOME,
VAR_ESTOQUE
FROM PRODUTO
WHERE CODPRODUTO = PRODUTO.CODPRODUTO;
IF VAR_ESTOQUE < PRODUTO.TOTAL THEN
DBMS_OUTPUT.PUT_LINE ('PRODUTO: '||PRODUTO.CODPRODUTO||'.
'||VAR_NOME||' | '||(VAR_ESTOQUE - PRODUTO.TOTAL));
END IF;
END LOOP;
END;
Campus:
RECREIO
Prova Impressa em 01/05/2020 por
RICARDO MENARTOWICZ
Prova Montada em 01/05/2020
2)
CREATE OR REPLACE PROCEDURE CALCULAR_COMISSAO
IS
VAR_RESULTADO NUMBER;
VAR_COMISSAO VENDEDOR.COMISSAO%TYPE;
VAR_VENDA VENDA.VALORTOTAL%TYPE;
BEGIN
FOR VAR_VENDEDOR IN (
SELECT
CODVENDEDOR
FROM VENDEDOR
ORDER BY CODVENDEDOR ASC
)
LOOP
SELECT
COMISSAO
INTO
VAR_COMISSAO
FROM VENDEDOR
WHERE CODVENDEDOR = VAR_VENDEDOR.CODVENDEDOR;
SELECT
SUM(VALORTOTAL)
INTO
VAR_VENDA
FROM VENDA
WHERE CODVENDEDOR = VAR_VENDEDOR.CODVENDEDOR
GROUP BY VAR_VENDEDOR.CODVENDEDOR;
VAR_RESULTADO := (VAR_VENDA * (VAR_COMISSAO/100));
UPDATE VENDEDOR
SET VALOR = VAR_RESULTADO
WHERE VAR_VENDEDOR.CODVENDEDOR = CODVENDEDOR;
END LOOP;
END;
Campus:
RECREIO
Prova Impressa em 01/05/2020 por
RICARDO MENARTOWICZ
Prova Montada em 01/05/2020
3)
CREATE OR REPLACE FUNCTION PEGAR_TOTAL
(P_CODCLIENTE IN VENDA.CODCLIENTE%TYPE, P_CODPRODUTO IN
ITEMVENDA.CODPRODUTO%TYPE)
RETURN ITEMVENDA.QUANTIDADE%TYPE
IS
V_QUANTIDADE ITEMVENDA.QUANTIDADE%TYPE;
BEGIN
SELECT
SUM(QUANTIDADE)
INTO
V_QUANTIDADE
FROM VENDA, ITEMVENDA
WHERE VENDA.CODVENDA = ITEMVENDA.CODVENDA
AND CODCLIENTE = P_CODCLIENTE
AND CODPRODUTO = P_CODPRODUTO;
RETURN V_QUANTIDADE;
END;
Campus:
RECREIO
Prova Impressa em 01/05/2020 por
RICARDO MENARTOWICZ
Prova Montada em 01/05/2020
4)
CREATE OR REPLACE TRIGGER VALIDAR_CADASTRO
BEFORE INSERT OR UPDATE OF QUANTIDADE
ON ITEMVENDA
FOR EACH ROW
BEGIN
IF :NEW.QUANTIDADE <= 1 OR TRUNC(:NEW.QUANTIDADE) !=
:NEW.QUANTIDADE THEN
raise_application_error (-20001, 'Quantidade não pode ser
numero decimal e deve ser maior que zero');
END IF;
IF :NEW.VALOR < 0 THEN
raise_application_error (-20002, 'Valor deve ser maior que
zero');
END IF;
END;