Questão de Banco de Dados — PL-SQL — FUNDATEC 2025
Banco de Dados›PL-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?
AApresenta uma linha para cada cliente e uma coluna para cada produto da cláusula IN com contagem de cada produto por cliente.
BExibe uma linha para cada produto da cláusula IN contendo a contagem de produtos.
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.
DMostra a contagem de produtos da cláusula IN em uma única linha e o subtotal por cliente em uma linha abaixo.
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.
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.