Baixe o app para aproveitar ainda mais
Prévia do material em texto
EXERCÍCIOS (LISTA 03): 10. Uma empresa oferece um bônus a seus funcionários com base no lucro líquido (tabela LUCRO) obtido durante o ano e no valor do salário do funcionário (tabela SALARIO). O bônus é calculado conforme a seguinte formula: BONUS = LUCRO * 0.01 + SALARIO * 0.05 Crie uma procedure que receba o ano (tabela LUCRO) e número de matrícula do funcionário e devolva (imprima) o valor do seu respectivo bônus. --Criar a tabela LUCRO CREATE TABLE LUCRO (ANO NUMBER(4), VALOR NUMBER(9,2)); -- Criar a tabela SALARIO CREATE TABLE SALARIO (MATRICULA NUMBER(4), VALOR NUMBER(7,2)); --Inserir dados INSERT INTO LUCRO VALUES (2017,1200000); INSERT INTO LUCRO VALUES (2018,1500000); INSERT INTO LUCRO VALUES (2019,1400000); INSERT INTO LUCRO VALUES (2020, 1300000); INSERT INTO SALARIO VALUES (1001,5500); INSERT INTO SALARIO VALUES (1002,6200); INSERT INTO SALARIO VALUES (1003,8400); CREATE OR REPLACE PROCEDURE SP_CALCULA_BONUS (P_ANO LUCRO.ANO%TYPE, P_MAT SALARIO.MATRICULA%TYPE) IS V_LUCRO LUCRO.VALOR%TYPE; V_SALARIO SALARIO.VALOR%TYPE; V_BONUS NUMBER(7,2); BEGIN SELECT VALOR INTO V_LUCRO FROM LUCRO WHERE ANO = P_ANO; SELECT VALOR INTO V_SALARIO FROM SALARIO WHERE MATRICULA = P_MAT; V_BONUS := V_LUCRO * 0.01 + V_SALARIO * 0.05; DBMS_OUTPUT.PUT_LINE ('Valor do Bonus: ' || V_BONUS); END; / SET SERVEROUTPUT ON; EXECUTE SP_CALCULA_BONUS (2017,1001); 11. Todos os programas em PL/SQL são compostos por blocos. Para tanto, um bloco é definido basicamente com as seguintes palavras chaves: A OPEN - BEGIN - EXCEPTION - CLOSE B DECLARE - BEGIN - END - CLOSE C DECLARE - BEGIN - EXCEPTION - END D OPEN - BEGIN - END - CLOSE E BEGIN - OPEN - CLOSE – END 12. Em PL/SQL, quanto aos cursores explícitos, os três comandos essenciais existentes são: A START, SEEK e CLOSE B OPEN, FETCH e CLOSE C OPEN, SEEK e END D START, FETCH e END E OPEN, SEEK e CLOSE 13. Os comentários em arquivos de comando PL/SQL são feitos com a utilização do caractere #. C Certo E Errado 14. Analise o scritpt PL/SQL a seguir: DECLARE c_livroid livro.livroid%type; c_titulo livro.titulo%type; CURSOR c_livros is SELECT livroid, titulo FROM livro; BEGIN OPEN c_livros; LOOP .......; EXIT WHEN c_livros%notfound; dbms_output.put_line(c_livroid || ' ' ||c_titulo); END LOOP; CLOSE c_livros; END; Para que esse script funcione corretamente, exibindo os códigos identificadores e títulos de cada livro, a linha pontilhada deve ser substituída por: A READ c_livroid, c_titulo FROM c_livros B GET c_livros AS c_livroid, c_titulo C RECOVER c_livroid, c_titulo FROM c_livros.livroid, c_livros.titulo D FETCH c_livros into c_livroid, c_titulo E SET NEXT c_livroid = c_livros.livroid, c_titulo= c_livros.livroid 15. No procedimento em PL/SQL abaixo, o parâmetro IN serve para: PROCEDURE define_atividade (ultima_data IN DATE, tarefa_desc IN OUT VARCHAR2, prox_data OUT DATE) A Aplicar um desconto e retroagir a prox_data B Passar valores dentro do procedimento define_atividade C Não faz nenhuma diferença e não implica em nada ao parâmetro D Incluir um novo registro na tabela DATE 16. No Oracle, a linguagem procedural que permite estreito acoplamento com o SQL é conhecida como: A Data Pump B PL/SQL C SQL Explorer D SQL*Loader E Transact SQL 17. Assim como as procedures, com PL/SQL é possível criar funções. Qual das alternativas abaixo está ERRADA em relação ao comando baixo? CREATE OR REPLACE FUNCTION cpmf (p_value IN NUMBER) RETURN NUMBER IS BEGIN RETURN (p_value * 0.038); END cpmf; A Cria uma função chamada cpmf para calcular e retornar 0,38% de um valor B Se uma função de mesmo nome existir, deverá ser eliminada e substituída por uma versão mais nova C O modo usado indica que o parâmetro é de entrada D A função pode ser chamada usando o comando: SELECT empno, ename, sal, cpmf(sal) FROM scott.empregados WHERE deptno = 10 E A diferença entre procedimento e função é que a procedure retorna ao menos um valor 18. O PL/SQL faz uso de identificadores. Há apenas identificadores válidos do PL/SQL em: A “meu prog”, grande_programa, inicio&fim, gerador B a&b, resta&1, ultimo-teste, entre2 C a/b, hoje, base$10, data12 D teste, primeiro_passo, abc$123, caso#1 E uma-vez, passo#3, um/dois, “fase 8” 19. Com PL/SQL é possível trabalhar com procedimentos e reaproveitar código. Um procedimento pode aceitar argumentos e ser chamado por um programa, uma sessão SQL etc. Desta forma, assinale a alternativa INCORRETA em relação ao código abaixo: CREATE OR REPLACE PROCEDURE aumenta_sal (p_empno IN empregados.empno%TYPE) IS BEGIN UPDATE scott.empregados SET sal = sal * 1.10 WHERE empno = p_empno; END aumenta_sal; A O REPLACE verifica se a procedure já existe. Caso positivo, ela será eliminada e substituída por uma nova versão B O parâmetro p_empno será do mesmo tipo e tamanho que a coluna empno da tabela empregados C Cria uma procedure de nome aumenta_sal D O modo usado indica que o parâmetro é de saída E Cria uma procedure para aumentar o salário de um funcionário em 10% 20. Caso seja utilizado o comando de manipulação de dados SELECT em um bloco PL/SQL, deverá ser incluído, obrigatoriamente, a cláusula INTO. C Certo E Errado 21. Considere as seguintes afirmações, relativas à estrutura básica de um bloco PL/SQL. I. A seção DECLARE é opcional e é utilizada para a declaração de variáveis, cursores, tipos e subprogramas, e outros elementos utilizados no programa. II. O conteúdo entre BEGIN e END é uma seção obrigatória onde ficam as instruções procedimentais. Esta seção deve conter pelo menos uma linha de código executável, que pode ser apenas o comando NULL para indicar que nada deve ser executado. III. A seção EXCEPTION é opcional e é onde ficam as instruções de tratamento de erro. Quais estão corretas? A Apenas I B Apenas II C Apenas III D Apenas I e III E I, II e III 22. CURSOR é uma área de trabalho temporária criada na memória do sistema quando um comando SQL é executado. C Certo E Errado 23. Considere, abaixo, a sintaxe de uma procedure PL/SQL. A opção [mode] define o modo de utilização do parâmetro e pode ser os valores: A IN, OUT ou IN OUT B OPEN C BETWEEN D SET E SEND 24. A unidade básica em PL/SQL é um bloco com a seguinte estrutura: DECLARE: que é a seção para declaração de variáveis, tipos e subprogramas locais; BEGIN: única seção do bloco que é indispensável e obrigatória, que é a seção executável, na qual ficam as instruções procedimentais e SQL; EXCEPTION: seção/setor onde ficam as instruções de tratamento de erro; END. C Certo E Errado 25. Com relação aos subprogramas PL/SQL, considere: I. São blocos PL/SQL nomeados que podem ser chamados com um conjunto de parâmetros. II. Podem ser um procedimento ou uma função. Em geral, a função é usada para realizar uma ação e o procedimento para calcular e retornar um valor. III. Podem ser agrupados em pacotes PL/SQL. IV. Podem ser declarados e definidos de duas formas: ou em um bloco PL/SQL ou em outro subprograma. Está correto o que se afirmar APENAS em: A II e IV B I, III e IV C I, II e III D III e IV E I e III 26. O comando DECLARE CURSOR permite a recuperação e a manipulação de registros em uma tabela, linha a linha. Para isso, deve-se declarar o cursor, abrir o cursor, recuperar as linhas do cursor e fechar o cursor, empregando os comandos DECLARE, OPEN, FETCH e CLOSE respectivamente. C Certo E Errado 27. Considere a sintaxe de instrução Oraclea seguir: CREATE [OR REPLACE] FUNCTION function_name [(parameter1 [mode1] datatype1, . . .)] RETURN datatype IS|AS [local_variable_declarations; . . .] BEGIN -- actions; RETURN expression; END [function_name]; Sobre esta sintaxe, é correto afirmar que A A opção OR REPLACE não é permitida na criação de funções B RETURN datatype não deve incluir uma especificação de tamanho C O bloco começa com uma instrução BEGIN e termina com uma instrução END, seguida obrigatoriamente do nome da função D A instrução RETURN expression é opcional, já que uma função não precisa retornar valor E É possível fazer referência a variáveis passadas como parâmetros no bloco PL/SQL de uma função armazenada. 28. O %NOTFOUND depois do nome do cursor é verdadeiro quando o FETCH, por meio do cursor, falha na busca de alguma tupla. C Certo E Errado 29. Considere a tabela EMP em um banco de dados Oracle, contendo os campos ID, NOME, CARGO e SALARIO. Considere ainda que o seguinte procedimento tem a intenção de reajustar o salário de todos os funcionários em 20%: CREATE OR REPLACE PROCEDURE aumento BEGIN UPDATE EMP SET SALARIO = SALARIO * 1.2; END; Para que o procedimento seja considerado correto é necessário: A Retirar a instrução OR REPLACE, pois de outra forma, ocorrerá um erro de sintaxe B Trocar a palavra-chave SET por VALUE C Trocar a palavra-chave BEGIN por { e END por } D Acrescentar a palavra-chave IS imediatamente antes da instrução BEGIN E Acrescentar a palavra-chave START imediatamente após a instrução BEGIN 30. No tipo de dados Escalar, NÃO é uma das quatro famílias de tipos de dados predefinidos do PL/SQL: A SYS_REFCURSOR B DATETIME C NUMERIC D CHARACTER E BOOLEAN 31. Nas estruturas de controle de ITERAÇÃO dos programas PL/SQL são utilizadas apenas as instruções: A LOOP e IF B IF e CASE C GOTO e NULL D CASE e GOTO E LOOP e EXIT 32. Para passar resultados de consultas entre subprogramas PL/SQL, quando um subprograma executa uma query e o resultado será processado por outro subprograma, utiliza-se uma: A View B Subquery C Variável cursor D Variável bind E Variável locator 33. Em PL/SQL, parâmetros cujo tipo não esteja explicitamente declarado são considerados como do tipo IN. C Certo E Errado 34. Em PL/SQL operações lógicas podem ser efetuadas com os operadores OR, AND e NOT. Considere as operações lógicas abaixo: I. FALSE AND NULL II. TRUE AND NULL Essas operações resultarão, respectivamente, em A FALSE e FALSE B FALSE e TRUE C NULL e NULL D NULL e TRUE E FALSE e NULL 35. Em uma estrutura de seleção usada em PL/SQL, é uma forma INVÁLIDA para realizar um teste de condição: A CASE B LOOP C IF-THEN D IF-THEN-ELSE E IF-THEN-ELSIF 36. Considere a seguinte sub-rotina PL/SQL: Sobre ela, é correto afirmar que: A O resultado de EXEC decisao (5.5, 4.5); é 10.0 B O procedimento decisao recebe 2 parâmetros reais e apresenta apenas o resultado da adição dos valores cuja soma seja maior ou igual a 10 C O comando de decisão IF utilizado no procedimento apresenta erros de sintaxe D O resultado de EXEC decisao (5.5, 6.5); é 12.0 E Não existe ELSE no comando de decisão IF; o certo seria usar ELSEIF
Compartilhar