Pular para o conteúdo principal

Questão de Banco de Dados — PL-SQL — FCC 2015

Banco de DadosPL-SQL
Código
fc020485
Banca
FCC
Órgão
MPE-PB
Ano
2015
Nível
Superior
Cargo
Analista de Sistemas – Administrador de Banco de Dados
No Oracle, uma função é um bloco PL/SQL nomeado que retorna um valor. A função a seguir, calcula um imposto sobre o salá- rio com base em uma alíquota fixa simples de 27%.CREATE OR REPLACE FUNCTION imposto(valor IN NUMBER)RETURN NUMBER ISBEGINRETURN (valor * 0.27);END imposto;/Considere a existência de um ambiente Oracle com SQL*Plus em condições ideais, com banco de dados, tabelas, campos e valores existentes. Considere também que, nos casos necessários, foi executado o comando SET SERVEROUTPUT ON antes das instruções abaixo.I. SELECT nome, salario, imposto(salario) FROM Funcionario WHERE idDepartamento = 5;II. EXECUTE dbms_output.put_line(imposto(10000)); III. VARIABLE salario NUMBER; EXECUTE :salario := imposto(10000);IV. DECLARE imp NUMBER; BEGIN imp = imposto(10000); DBMS_OUTPUT.PUT('O imposto é: '|| imp); END;Para chamar a função imposto, está correto o que consta APENAS em
  1. AIII e IV.
  2. BI, II e III.
  3. CII e III.
  4. DI e III.
  5. EII e IV.
Revelar gabarito e comentário

GabaritoB — I, II e III.

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

PL/SQL: Chamada de Função no Oracle

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.

Item I — ✅ Correta

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.

Item II — ✅ 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.

Item III — ✅ Correta

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.

Item IV — ❌ Incorreta

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