Para criar uma consulta que pesquise na tabela Trabalhadores de um banco de dados aberto e em condições ideais todos os nomes e telefones de trabalhadores cujos nomes sejam Sofia ou Sophia, um Analista de Sistemas deve utilizar a instrução PL/SQL SELECT nome, telefone FROM Trabalhadores WHERE
AREGEXP_LIKE (nome, '^So(f|ph)ia$');
Bnome ='^So(f|ph)ia$';
Cnome CONTAINS('^So(f|ph)ia$');
Dnome REGEXP('%So(f|ph)ia%');
EREGEXP(nome, '%So(f|ph)ia%');
Revelar gabarito e comentário▾
GabaritoA — REGEXP_LIKE (nome, '^So(f|ph)ia$');
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: Expressões Regulares (REGEXP_LIKE)
Gabarito: letra A. Para consultar nomes exatamente "Sofia" ou "Sophia", a instrução correta em Oracle PL/SQL utiliza a função REGEXP_LIKE com a expressão regular '^So(f|ph)ia$', que ancora o início (^) e o fim ($) e permite apenas as variações f ou ph. As demais alternativas misturam sintaxe de operador LIKE com expressões regulares ou usam funções inexistentes.
A banca testa o conhecimento da função específica para expressões regulares no Oracle PL/SQL, que é REGEXP_LIKE (ou REGEXP_INSTR para posição), e não operadores como LIKE ou CONTAINS. A expressão regular deve usar metacaracteres como ^, $, | (pipe) e () para grupos, e não curingas do LIKE como %.
Expressões regulares no Oracle PL/SQL: Função correta (REGEXP_LIKE, REGEXP_INSTR (posição)); Metacaracteres (^ (início), $ (fim), | (ou), () (grupo)); Operadores incorretos (= (igualdade literal), CONTAINS (texto completo), REGEXP (função inexistente)); Curingas do LIKE (% (qualquer sequência), _ (um caractere), Não funcionam em REGEXP_LIKE)
Alternativa A — ✅ Correta ⟵ GABARITO
Utiliza a função REGEXP_LIKE com a expressão regular '^So(f|ph)ia$'. O circunflexo ^ ancora o início da string, o cifrão $ ancora o final, e (f|ph) permite que o terceiro caractere seja f ou a sequência ph. Assim, a condição é verdadeira apenas para "Sofia" ou "Sophia", exatamente como pedido.
Alternativa B — ❌ Incorreta
Usa o operador de igualdade =, que compara literalmente a string. O valor '^So(f|ph)ia$' não é interpretado como padrão, mas sim como texto literal. Nenhuma linha com nome "Sofia" atenderia, pois o nome não contém os caracteres ^, (, |, etc.
Alternativa C — ❌ Incorreta
A função CONTAINS é usada em Oracle para buscas em índices de texto completo (Oracle Text), não para expressões regulares. Além disso, a sintaxe está incorreta: deveria ser CONTAINS(nome, '...') e, mesmo assim, não atenderia ao padrão desejado.
Alternativa D — ❌ Incorreta
A sintaxe nome REGEXP(...) não existe em PL/SQL. A função correta é REGEXP_LIKE. Além disso, o padrão '%So(f|ph)ia%' usa o curinga %, que é do operador LIKE, dentro de uma expressão regular. Em regex, % representa o próprio caractere '%', não um curinga. Para corresponder a qualquer sequência, usar-se-ia .*.
Alternativa E — ❌ Incorreta
Novamente, REGEXP isoladamente não é uma função válida. O correto é REGEXP_LIKE. O padrão '%So(f|ph)ia%' também mistura curingas do LIKE com grupos de regex, o que não funciona. Além disso, a função REGEXP(nome, ...) não é nativa do Oracle.
NÃO CAIA NESSA!
A banca explora a confusão entre os curingas do LIKE (%) e os metacaracteres de regex (.*). O candidato pode achar que % funciona em regex, mas não: em regex, % é literal. Lembre-se: no Oracle PL/SQL, use REGEXP_LIKE para comparar padrões regex, e sempre ancore com ^...$ se quiser correspondência exata.