Pular para o conteúdo principal

Questão de Banco de Dados — PL/SQL e Outras Extensões SQL — VUNESP 2023

Banco de DadosPL/SQL e Outras Extensões SQL
Código
vu195770
Banca
VUNESP
Órgão
TRF 3
Ano
2023
Cargo
TJ TRF3
Comandos com operadores escritos na linguagem PL/SQL utilizada no sistema gerenciador de banco de dados Oracle 21c estão sujeitos a regras de precedência. Assinale a alternativa que contém uma sequência de operadores que vai da precedência maior para precedência menor.
  1. A!=, **, +, OR.
  2. B**, | |, <>, NOT.
  3. C*, AND, >=, +.
  4. DLIKE, /, +, OR.
  5. EIS NULL, | |, *, −.
Revelar gabarito e comentário

GabaritoB — **, | |, <>, NOT.

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

Precedência de operadores em PL/SQL no Oracle

Gabarito: letra B. A precedência de operadores em PL/SQL segue uma hierarquia definida pela Oracle, na qual o operador de exponenciação (**) tem precedência maior que a concatenação (||), que por sua vez tem precedência maior que a comparação (<>), e o operador lógico NOT tem a menor precedência entre eles. A alternativa B é a única que apresenta uma sequência estritamente decrescente de precedência, da maior para a menor.

A precedência de operadores determina a ordem em que as operações são avaliadas em uma expressão. Em PL/SQL, assim como em outras linguagens, operadores com maior precedência são avaliados primeiro. Quando operadores têm a mesma precedência, a avaliação ocorre da esquerda para a direita, exceto para o operador de exponenciação (**), que é avaliado da direita para a esquerda. Essa hierarquia é fundamental para garantir que expressões complexas sejam interpretadas de forma consistente e previsível.

A Oracle documenta a precedência dos operadores em PL/SQL, e a ordem, da maior para a menor precedência, é a seguinte:

  1. Operadores de exponenciação: **

  2. Operadores unários: +, -, NOT (como prefixo)

  3. Operadores de multiplicação e divisão: *, /

  4. Operadores de adição e subtração: +, -

  5. Operadores de concatenação: ||

  6. Operadores de comparação: =, <, >, <=, >=, <>, !=, ~=

  7. Operadores lógicos: NOT, AND, OR

Essa ordem é crucial para entender como expressões são avaliadas. Por exemplo, na expressão 2 + 3 * 4, a multiplicação é avaliada antes da adição, resultando em 2 + 12 = 14, e não (2 + 3) * 4 = 20. Da mesma forma, em 'a' || 'b' = 'ab', a concatenação é avaliada antes da comparação, resultando em 'ab' = 'ab' que é verdadeiro.

A pegadinha desta questão está em confundir a precedência de operadores com a ordem de avaliação de expressões em outras linguagens ou com a precedência de operadores lógicos em SQL padrão. Em PL/SQL, a concatenação (||) tem precedência maior que os operadores de comparação, e os operadores lógicos têm a menor precedência. Além disso, o operador NOT tem precedência maior que AND, que por sua vez tem precedência maior que OR.

Guarde a hierarquia completa: exponenciação > unários > multiplicação/divisão > adição/subtração > concatenação > comparação > lógicos. É exatamente essa ordem que as alternativas tentam inverter ou embaralhar.

  1. 1Exponenciação (**)
  2. 2Unários (+, -, NOT)
  3. 3Multiplicação/Divisão (*, /)
  4. 4Adição/Subtração (+, -)
  5. 5Concatenação (||)
  6. 6Comparação (=, <>, !=)
  7. 7Lógicos (NOT, AND, OR)
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

A sequência !=, **, +, OR está incorreta porque coloca o operador de comparação != antes do operador de exponenciação **. Na hierarquia correta, ** tem precedência maior que !=. Além disso, + (adição) tem precedência maior que OR, mas a ordem apresentada está errada. A sequência correta, da maior para a menor, seria **, +, !=, OR.

Alternativa B — ✅ Correta ⟵ GABARITO

A sequência **, ||, <>, NOT está correta. O operador de exponenciação ** tem a maior precedência, seguido pela concatenação ||, depois o operador de comparação <>, e por fim o operador lógico NOT. Essa é exatamente a ordem decrescente de precedência definida pela Oracle para PL/SQL.

Alternativa C — ❌ Incorreta

A sequência *, AND, >=, + está incorreta porque coloca o operador lógico AND antes dos operadores de comparação >= e de adição +. Na hierarquia correta, * (multiplicação) tem precedência maior que + (adição), que tem precedência maior que >= (comparação), que tem precedência maior que AND (lógico). A ordem correta seria *, +, >=, AND.

Alternativa D — ❌ Incorreta

A sequência LIKE, /, +, OR está incorreta porque coloca o operador LIKE (comparação) antes do operador de divisão /. Na hierarquia correta, / (divisão) tem precedência maior que + (adição), que tem precedência maior que LIKE (comparação), que tem precedência maior que OR (lógico). A ordem correta seria /, +, LIKE, OR.

Alternativa E — ❌ Incorreta

A sequência IS NULL, ||, *, − está incorreta porque coloca o operador IS NULL (comparação) antes da concatenação || e da multiplicação *. Na hierarquia correta, * (multiplicação) tem precedência maior que || (concatenação), que tem precedência maior que IS NULL (comparação). A ordem correta seria *, ||, IS NULL.

PEGA ESSA DICA!

Para resolver questões de precedência, memorize a hierarquia completa: exponenciação > unários > multiplicação/divisão > adição/subtração > concatenação > comparação > lógicos. Na prova, verifique se a sequência apresentada segue essa ordem estritamente decrescente. Se houver qualquer inversão, a alternativa está incorreta.

Gabarito: letra B

Link permanente: /questoes/vu195770