Questão de Banco de Dados — PL-SQL — FCC 2015
- Código
- fc020485
- Banca
- FCC
- Órgão
- MPE-PB
- Ano
- 2015
- Nível
- Superior
- Cargo
- Analista de Sistemas – Administrador de Banco de Dados
- AIII e IV.
- BI, II e III.
- CII e III.
- DI e III.
- EII e IV.
GabaritoB — I, II e III.
Gabarito: letra B. As chamadas I, II e III são válidas; a IV possui erro de sintaxe na atribuição (uso de = em vez de :=). A função imposto retorna um NUMBER e pode ser invocada em SQL (SELECT), via EXECUTE com dbms_output.put_line, e com bind variables. Apenas a tentativa de atribuição no bloco anônimo está incorreta.
A chamada em SELECT é perfeitamente válida. Funções PL/SQL que não possuem parâmetros OUT e não alteram estado do banco (como esta, que apenas calcula valor * 0.27) podem ser utilizadas diretamente em comandos SQL. A sintaxe imposto(salario) está correta.
O comando EXECUTE executa um bloco PL/SQL anônimo. dbms_output.put_line aceita um número (que será convertido implicitamente para string). A chamada imposto(10000) retorna 2700 e é passada como argumento. Portanto, válido.
A declaração VARIABLE salario NUMBER cria uma variável de bind (no SQL*Plus). O EXECUTE :salario := imposto(10000); atribui o retorno da função à variável de bind, usando a sintaxe correta :=. Funciona sem erros.
O bloco anônimo tenta atribuir o resultado da função à variável imp com imp = imposto(10000). Em PL/SQL, atribuição é feita com :=, não com =. O operador = é usado apenas para comparação (em condições). O erro de sintaxe impede a execução. A forma correta seria imp := imposto(10000);.
Conclusão: apenas os itens I, II e III estão corretos, correspondendo à alternativa B.
Link permanente: /questoes/fc020485