Pular para o conteúdo principal

Questão de Banco de Dados — PL-SQL — FUNDATEC 2025

Banco de DadosPL-SQL
Código
qg474894
Banca
FUNDATEC
Órgão
PROCERGS
Ano
2025
Nível
Superior
Cargo
Analista em Computação / Ênfase em Programação de Sistemas na Tecnologia JAVA
Considere uma tabela pedido que possui as colunas cliente e produto no seguinte trecho de código escrito em PL/SQL. O que acontecerá após executá-lo?Q54.png 281×158
  1. AApresenta uma linha para cada cliente e uma coluna para cada produto da cláusula IN com contagem de cada produto por cliente.
  2. BExibe uma linha para cada produto da cláusula IN contendo a contagem de produtos.
  3. CExibe uma linha para cada produto da cláusula IN contendo a contagem de produtos, bem como uma linha abaixo com o subtotal por cliente.
  4. DMostra a contagem de produtos da cláusula IN em uma única linha e o subtotal por cliente em uma linha abaixo.
  5. EApresenta erro de sintaxe.
Revelar gabarito e comentário

GabaritoA — Apresenta uma linha para cada cliente e uma coluna para cada produto da cláusula IN com contagem de cada produto por cliente.

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: Consulta com PIVOT e Contagem por Cliente e Produto

Gabarito: letra A. O trecho de código PL/SQL apresentado utiliza uma consulta com a cláusula PIVOT do Oracle, que transforma valores únicos de uma coluna (produto) em colunas separadas, agregando os dados (contagem) para cada valor de outra coluna (cliente). O resultado é uma tabela com uma linha para cada cliente e uma coluna para cada produto listado na cláusula IN, mostrando a contagem de produtos por cliente.

A consulta em questão usa a funcionalidade PIVOT do Oracle SQL, que é uma operação de rotação de tabela (também conhecida como cross tabulation ou crosstab). Ela pega valores distintos de uma coluna e os transforma em cabeçalhos de colunas, permitindo que você agregue dados (como COUNT, SUM, AVG) para cada combinação de valores. No caso, a coluna produto é pivotada, e a coluna cliente define as linhas do resultado. A cláusula IN especifica quais valores de produto devem se tornar colunas. O COUNT é aplicado a cada combinação de cliente e produto, resultando na contagem de pedidos para cada par.

Para entender melhor, imagine a tabela pedido com os seguintes dados:

cliente

produto

Ana

Caneta

Ana

Caneta

Ana

Lápis

Bruno

Caneta

Bruno

Borracha

Se a consulta for SELECT * FROM pedido PIVOT (COUNT(*) FOR produto IN ('Caneta' AS caneta, 'Lápis' AS lapis, 'Borracha' AS borracha)), o resultado será:

cliente

caneta

lapis

borracha

Ana

2

1

0

Bruno

1

0

1

Isso mostra exatamente o que a alternativa A descreve: uma linha para cada cliente e uma coluna para cada produto da cláusula IN, com a contagem de cada produto por cliente.

A pegadinha desta questão está em confundir o PIVOT com outras operações de agregação, como GROUP BY simples ou ROLLUP/CUBE. O PIVOT é específico para transformar valores em colunas, enquanto GROUP BY apenas agrupa linhas. As alternativas B, C e D descrevem comportamentos de consultas com GROUP BY e ROLLUP, que não é o caso. A alternativa E sugere erro de sintaxe, mas a sintaxe do PIVOT está correta.

Guarde a distinção: PIVOT transforma valores de uma coluna em colunas do resultado, enquanto GROUP BY apenas agrega linhas. É exatamente essa diferença que separa a alternativa correta das demais.

1O que faz
Transforma valores em colunas
Agrega por linha (cliente)
2Resultado
Linha por cliente
Coluna por produto (IN)
Contagem por par
3Distinções
GROUP BY: agrega sem rotacionar
ROLLUP: adiciona subtotais
PIVOT (Oracle)
LEVELsoulevel.com.br
PIVOT (Oracle): O que faz (Transforma valores em colunas, Agrega por linha (cliente)); Resultado (Linha por cliente, Coluna por produto (IN), Contagem por par); Distinções (GROUP BY: agrega sem rotacionar, ROLLUP: adiciona subtotais)

Alternativa A — ✅ Correta ⟵ GABARITO

Esta alternativa descreve com precisão o comportamento do PIVOT. A consulta transforma os valores distintos da coluna produto (especificados na cláusula IN) em colunas do resultado, e para cada cliente (linha) calcula a contagem de pedidos para cada produto. O resultado é uma tabela com uma linha por cliente e uma coluna por produto, com a contagem correspondente.

Alternativa B — ❌ Incorreta

Esta alternativa descreve um comportamento de GROUP BY simples, onde o resultado teria uma linha para cada produto com a contagem total de pedidos, sem separação por cliente. No PIVOT, as linhas são definidas pela coluna cliente, não pela coluna produto. A alternativa confunde a operação de rotação com uma agregação simples.

Alternativa C — ❌ Incorreta

Esta alternativa descreve o comportamento de uma consulta com GROUP BY e ROLLUP, que adiciona linhas de subtotal. No PIVOT, não há linhas de subtotal por cliente; cada linha representa um cliente distinto, e as colunas representam os produtos. A alternativa confunde PIVOT com ROLLUP.

Alternativa D — ❌ Incorreta

Esta alternativa também descreve um comportamento de GROUP BY com ROLLUP, mas com uma única linha para todos os produtos e uma linha de subtotal por cliente. No PIVOT, o resultado tem uma linha para cada cliente, não uma única linha para todos os produtos. A alternativa confunde a estrutura do resultado do PIVOT com a de um GROUP BY com ROLLUP.

Alternativa E — ❌ Incorreta

A sintaxe do PIVOT no Oracle é válida e não gera erro. A consulta está correta e produzirá o resultado descrito na alternativa A. A alternativa sugere um erro de sintaxe que não existe.

Gabarito: letra A

Link permanente: /questoes/qg474894