Considerando a execução de um script PL/SQL para gerar rela...
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