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;