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
ASELECT nome, VRF((comissao,null),'Sem comissão') FROM Funcionario;
BSELECT nome, NVL((comissao,null),'Sem comissão') FROM Funcionario;
CSELECT nome, NVL(TO_CHAR(comissao),'Sem comissão') FROM Funcionario;
DSELECT nome, ISNULL(comissao,'Sem comissão') FROM Funcionario;
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.
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.