Pular para o conteúdo principal

Questão de Banco de Dados — Oracle — FCC 2018

Banco de DadosOracle
Código
fc051109
Banca
FCC
Órgão
TRT - 6ª Região (PE)
Ano
2018
Cargo
Analista Judiciário - Tecnologia da Informação
Considere a existência de uma tabela chamada Funcionario que possui diversos campos, dentre eles o campo nome, que aceita cadeia de caracteres, e o campo comissao, que aceita números reais. No Oracle, para exibir o nome de todos os funcionários e suas respectivas comissões, de forma que se o funcionário não receber comissão apareça 'Sem comissão', utiliza-se a instrução SQL
  1. ASELECT nome, VRF((comissao,null),'Sem comissão') FROM Funcionario;
  2. BSELECT nome, NVL((comissao,null),'Sem comissão') FROM Funcionario;
  3. CSELECT nome, NVL(TO_CHAR(comissao),'Sem comissão') FROM Funcionario;
  4. DSELECT nome, ISNULL(comissao,'Sem comissão') FROM Funcionario;
  5. ESELECT nome, GET((comissao,null),'Sem comissão') FROM Funcionario;
Revelar gabarito e comentário

GabaritoC — SELECT nome, NVL(TO_CHAR(comissao),'Sem comissão') FROM Funcionario;

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

Oracle SQL: Função NVL para substituição de nulos

Gabarito: letra C. A questão exibe nomes e comissões, substituindo valores nulos por 'Sem comissão' no Oracle. A função correta é NVL, que retorna um valor alternativo quando o primeiro argumento é nulo. Como a coluna comissao é numérica, é preciso convertê-la para caractere com TO_CHAR para compatibilidade de tipos. A alternativa C faz exatamente isso.

1Oracle
NVL (padrão)
NVL2
COALESCE (padrão SQL)
2SQL Server
ISNULL
3MySQL
IFNULL
Funções de substituição de nulos
LEVELsoulevel.com.br
Funções de substituição de nulos: Oracle (NVL (padrão), NVL2, COALESCE (padrão SQL)); SQL Server (ISNULL); MySQL (IFNULL)

Alternativa A — ❌ Incorreta

A função VRF não existe no Oracle SQL. Não há função com esse nome para substituição de nulos.

Alternativa B — ❌ Incorreta

A sintaxe NVL((comissao,null),'Sem comissão') é inválida. O primeiro argumento de NVL deve ser uma expressão, não uma tupla. Além disso, se comissao for nulo, NVL receberia null e retornaria o valor alternativo corretamente, mas a sintaxe correta seria NVL(comissao, 'Sem comissão') – sem parênteses extras e sem o segundo null. Ainda assim, faltaria a conversão para caractere, pois os tipos precisam ser compatíveis (não se pode misturar número e string diretamente).

Alternativa C — ✅ Correta ⟵ GABARITO

SELECT nome, NVL(TO_CHAR(comissao),'Sem comissão') FROM Funcionario;

  • TO_CHAR(comissao) converte o valor numérico para string.

  • NVL verifica se o resultado é nulo e, se for, retorna 'Sem comissão'.

  • Caso comissao tenha um valor (não nulo), TO_CHAR(comissao) produz a string correspondente, e NVL a retorna.

  • A consulta exibe corretamente o nome e a comissão, com substituição de nulos.

Alternativa D — ❌ Incorreta

ISNULL é uma função do SQL Server, não do Oracle. No Oracle, a função correspondente é NVL ou NVL2/COALESCE. Portanto, a sintaxe não é válida no Oracle.

Alternativa E — ❌ Incorreta

A função GET não existe no Oracle SQL. Não há função com esse nome para tratamento de nulos.

PEGA ESSA DICA!

No Oracle, sempre que usar NVL com tipos diferentes (ex.: número e string), converta explicitamente a expressão para o tipo desejado com TO_CHAR, TO_NUMBER etc. Funções similares em outros bancos: ISNULL (SQL Server), IFNULL (MySQL), COALESCE (padrão SQL, também funciona no Oracle). Memorize a sintaxe correta para evitar confusões.

Gabarito: letra C.

Link permanente: /questoes/fc051109