Considerando a execução de um script PL/SQL para gerar rela...

Próximas questões
Com base no mesmo assunto
Q3035485 Banco de Dados
Considerando a execução de um script PL/SQL para gerar relatórios de vendas mensais, que necessita agrupar vendas por mês e calcular o total vendido, supondo que a tabela Vendas inclua as colunas VendaID, DataVenda e ValorVenda, qual seria a estratégia correta para realizar este cálculo?
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

A alternativa A é a correta.

Para resolver esta questão, é importante compreender como o PL/SQL interage com a linguagem SQL para realizar operações de cálculo e agrupamento de dados em tabelas. A questão trata de calcular o total de vendas mensais a partir de uma tabela chamada Vendas, que contém as colunas VendaID, DataVenda, e ValorVenda.

Alternativa A: Esta é a estratégia correta. Aqui, utilizamos a função SUM() para calcular o total de vendas, e a função TO_CHAR() para extrair o mês da data de cada venda. Quando aplicamos TO_CHAR(DataVenda, 'MM'), conseguimos agrupar as vendas por mês que é exatamente o que a questão pede. Esta abordagem é eficiente pois utiliza funções SQL diretamente, minimizando a complexidade e o tempo de execução.

Alternativa B: Nesta alternativa, é sugerido o uso de um LOOP para iterar sobre cada registro e acumular valores. Apesar de ser uma solução possível, ela não é a mais eficiente. A utilização de loops pode ser mais lenta quando trabalhamos com grandes volumes de dados, pois a operação é realizada registro por registro, ao invés de processar os dados de forma agrupada.

Alternativa C: Criar uma função PL/SQL que receba o mês como parâmetro e retorne o total de vendas para aquele mês não é a abordagem mais eficaz para esta questão. Embora funcione, ela não usa o agrupamento de SQL da forma mais direta e pode requerer múltiplas chamadas para cobrir todos os meses, ao contrário de uma única query que resolve tudo de uma só vez.

Alternativa D: Esta alternativa propõe o uso de um cursor com um acumulador dentro de um procedimento armazenado. Embora esta abordagem seja técnica e válida, ela é mais complexa e menos eficiente do que simplesmente usar SQL para calcular e agrupar dados. Cursors são úteis em algumas situações específicas, mas para este caso, onde precisamos de um simples agrupamento e soma, são desnecessários.

Em resumo, a melhor prática é utilizar o poder do SQL para operações de agregação e agrupamento, o que torna a alternativa A a mais adequada para esta questão.

Gostou do comentário? Deixe sua avaliação aqui embaixo!

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

Para gerar relatórios de vendas mensais em PL/SQL, a estratégia mais eficiente seria:

A) Aplicar a função SUM() diretamente na tabela Vendas, agrupando os resultados por mês usando a função TO_CHAR(DataVenda, 'MM').



SELECT TO_CHAR(DataVenda, 'MM') as Mes, SUM(ValorVenda) as TotalVendas

FROM Vendas

GROUP BY TO_CHAR(DataVenda, 'MM')

ORDER BY Mes;

Esta abordagem utiliza SQL puro com funções de agregação, que é exatamente o que os bancos de dados relacionais foram projetados para fazer eficientemente. A consulta seria algo como:

Esta é a solução mais direta e eficiente, pois:

  • Aproveita o motor de otimização do banco de dados
  • Processa os dados em blocos (não registro a registro)
  • Minimiza a transferência de dados entre o banco e a aplicação

B) Utilizar um LOOP para iterar por cada registro de venda e um array para acumular os valores por mês.

Esta abordagem procedural seria menos eficiente, pois processa registro por registro quando o banco de dados pode fazer isso muito mais rapidamente em operações em conjunto.

C) Criar uma função PL/SQL que receba o mês como parâmetro e retorne o total de vendas para aquele mês.

Esta abordagem exigiria múltiplas chamadas (uma para cada mês) e não agruparia automaticamente todos os meses em um único resultado.

D) Implementar um procedimento armazenado que use um cursor para selecionar vendas por mês e um acumulador para somar os valores.

O uso de cursores é geralmente menos eficiente que operações SQL diretas para este tipo de agregação.

A alternativa correta é a A, pois utiliza os recursos nativos de SQL que são otimizados para operações de agregação em conjuntos de dados.

fronte: perplexity

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo