Oracle
 sql >> Base de données >  >> RDS >> Oracle

L'utilisation de select * pour un curseur en PL/SQL est-elle considérée comme une mauvaise programmation ?

En utilisant select * dans votre code est ce que j'appellerais la programmation paresseuse, avec plusieurs effets secondaires désagréables. L'intensité de ces effets secondaires variera, mais ce n'est jamais positif.

J'utiliserai certains des points déjà mentionnés dans d'autres réponses, mais n'hésitez pas à modifier ma réponse et à ajouter quelques points négatifs supplémentaires sur l'utilisation de select * .

  1. Vous envoyez plus de données du moteur SQL à votre code que nécessaire, ce qui a un effet négatif sur les performances.

  2. Les informations que vous récupérez doivent être placées dans des variables (une variable d'enregistrement par exemple). Cela prendra plus de mémoire PGA que nécessaire.

  3. En utilisant select * vous n'utiliserez jamais un index seul pour récupérer les informations recherchées, vous devrez toujours visiter la table également (à condition qu'il n'existe aucun index contenant toutes les colonnes de la table). Encore une fois, avec un effet négatif sur les performances.

  4. Moins clair pour les personnes qui maintiennent votre code quelle est votre intention. Ils doivent se plonger dans le code pour repérer toutes les occurrences de votre variable d'enregistrement afin de savoir ce qui est récupéré.

  5. Vous n'utiliserez pas de fonctions SQL pour effectuer des calculs, mais vous vous fierez toujours à des calculs PL/SQL ou Java. Vous manquez peut-être de grandes améliorations SQL telles que les fonctions analytiques, la clause de modèle, la factorisation de sous-requêtes récursives, etc.

  6. À partir d'Oracle11, les dépendances sont suivies au niveau de la colonne, ce qui signifie que lorsque vous utilisez select * , votre code est marqué dans le dictionnaire de données comme "dépendant de toutes les colonnes" de cette table. Votre procédure sera invalidée si quelque chose arrive à l'une de ces colonnes. Ainsi, l'utilisation de select * signifie que votre code sera invalidé plus souvent que nécessaire.

Encore une fois, n'hésitez pas à ajouter vos propres points.