Pular para o conteúdo principal

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

Banco de DadosPL-SQL
Código
fc058920
Banca
FCC
Órgão
AL-AP
Ano
2020
Cargo
Analista Legislativo - Desenvolvedor de Banco de Dados
Considere a função PL/SQL abaixo, criada no Oracle, em ambiente ideal.CREATE OR REPLACE FUNCTION obterDados (vSal IN colaborador.salario%TYPE,vAdicional IN colaborador.adicional%TYPE)RETURN NUMBER ISBEGIN..I..END obterDados;/O objetivo da função é retornar o salário anual calculado a partir do salário mensal e do adicional (extra) de um funcionário, utilizando a fórmula (salário do funcionário * 12) + (adicional recebido * salário * 12). Para que a função realize a operação desejada, a lacuna I acima deverá ser preenchida por:
  1. Athis.salario:= (vSal * 12) + (vAdicional * vSal * 12);
  2. BRETURN (NVL(vSal,0) * 12 + (NVL(vAdicional,0) * NVL(vSal,0) * 12));
  3. Csalario:=(NVL(vSal,0) * 12 + (NVL(vAdicional,0) * NVL(vSal,0) * 12));
  4. DRETURN (ROUNDTO(vSal,2) * 12 + (ROUNDTO(vAdicional,2) * ROUNDTO(vSal,2) * 12));
  5. ERETURN (DECIMAL(vSal,2) * 12 + (DECIMAL(vAdicional,2) * DECIMAL(vSal,2) * 12));
Revelar gabarito e comentário

GabaritoB — RETURN (NVL(vSal,0) * 12 + (NVL(vAdicional,0) * NVL(vSal,0) * 12));

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”.

Função PL/SQL para cálculo de salário anual

Gabarito: letra B. A função obterDados deve retornar o valor do salário anual conforme a fórmula (salário * 12) + (adicional * salário * 12). A alternativa B é a única que combina corretamente o uso da função NVL para tratar valores nulos e a instrução RETURN obrigatória em funções PL/SQL.

A questão exige conhecimento de sintaxe PL/SQL: toda função deve conter pelo menos um comando RETURN, e é boa prática tratar possíveis valores NULL nos parâmetros para evitar resultados nulos inesperados. A banca explora esses dois pontos com distratores que ou omitem o RETURN ou usam funções inexistentes.

Alternativa A — ❌ Incorreta

O comando this.salario:=... não é válido em PL/SQL. Não existe a palavra-chave this nesse contexto, e a função não possui um comando RETURN, o que é obrigatório para que a função devolva um valor.

Alternativa B — ✅ Correta ⟵ GABARITO

A expressão usa NVL para converter NULL em zero, evitando que o resultado seja NULL. A fórmula está correta: (vSal * 12) + (vAdicional * vSal * 12). O comando RETURN está presente, retornando o número calculado.

Alternativa C — ❌ Incorreta

Atribui o resultado a uma variável salario que não foi declarada e, principalmente, não possui RETURN. Sem o comando RETURN, a função não retorna nenhum valor, o que é inválido.

Alternativa D — ❌ Incorreta

A função ROUNDTO não existe no Oracle PL/SQL. A função correta para arredondamento é ROUND. Portanto, a tentativa de usar ROUNDTO causa erro de compilação.

Alternativa E — ❌ Incorreta

DECIMAL é um tipo de dados, não uma função de conversão. Para converter ou formatar números usa-se TO_NUMBER, CAST, ou funções de arredondamento. O uso de DECIMAL como função invalida a expressão.

PEGA ESSA DICA!

Em PL/SQL, lembre-se sempre de:

  • Incluir a instrução RETURN em funções.

  • Utilizar NVL(expressão, valor_substituto) para evitar que valores NULL se propaguem.

  • Conhecer as funções built-in reais: ROUND, TRUNC, TO_NUMBER, NVL, NVL2, etc.

Gabarito: letra B

Link permanente: /questoes/fc058920