Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Usar select * para um cursor em PL/SQL é considerado programação ruim?


Usando select * em seu código é o que eu chamaria de programação preguiçosa, com vários efeitos colaterais desagradáveis. Quanto você experimenta esses efeitos colaterais, será diferente, mas nunca é positivo.

Usarei alguns dos pontos já mencionados em outras respostas, mas sinta-se à vontade para editar minha resposta e adicionar mais alguns pontos negativos sobre o uso de select * .

  1. Você está enviando mais dados do mecanismo SQL para seu código do que o necessário, o que afeta negativamente o desempenho.

  2. As informações que você recebe de volta precisam ser colocadas em variáveis ​​(uma variável de registro, por exemplo). Isso levará mais memória PGA do que o necessário.

  3. Usando select * você nunca usará um índice sozinho para recuperar as informações desejadas, você sempre terá que visitar a tabela também (desde que não exista um índice que contenha todas as colunas da tabela). Novamente, com um efeito negativo no desempenho.

  4. Menos claro para as pessoas que mantêm seu código qual é sua intenção. Eles precisam se aprofundar no código para identificar todas as ocorrências de sua variável de registro para saber o que está sendo recuperado.

  5. Você não usará funções SQL para realizar cálculos, mas sempre contará com cálculos PL/SQL ou Java. Você possivelmente está perdendo algumas grandes melhorias de SQL, como funções analíticas, cláusula de modelo, fatoração de subconsulta recursiva e similares.

  6. A partir do Oracle11, as dependências estão sendo rastreadas no nível da coluna, o que significa que quando você usa select * , seu código está sendo marcado no dicionário de dados como "dependente de todas as colunas" dessa tabela. Seu procedimento será invalidado quando algo acontecer com uma dessas colunas. Portanto, usar select * significa que seu código será invalidado com mais frequência do que o necessário.

Novamente, sinta-se à vontade para adicionar seus próprios pontos.