Questão de Banco de Dados — PL/SQL e Outras Extensões SQL — VUNESP 2023
- Código
- vu195770
- Banca
- VUNESP
- Órgão
- TRF 3
- Ano
- 2023
- Cargo
- TJ TRF3
- A!=, **, +, OR.
- B**, | |, <>, NOT.
- C*, AND, >=, +.
- DLIKE, /, +, OR.
- EIS NULL, | |, *, −.
GabaritoB — **, | |, <>, NOT.
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:
Operadores de exponenciação: **
Operadores unários: +, -, NOT (como prefixo)
Operadores de multiplicação e divisão: *, /
Operadores de adição e subtração: +, -
Operadores de concatenação: ||
Operadores de comparação: =, <, >, <=, >=, <>, !=, ~=
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.
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.
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.
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.
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.
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.
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