Quels sont les avantages des packages par rapport aux procédures et fonctions autonomes?


13

Vous cherchez une réponse canonique à la question de savoir pourquoi les packages devraient être préférés dans une base de données Oracle par rapport aux procédures et fonctions autonomes.

Réponses:


12

Avantages des packages

Regroupement logique - Les méthodes qui fonctionnent ensemble peuvent être regroupées dans une unité cohérente plutôt que simplement couplées logiquement mais physiquement séparées.

Méthodes privées sécurisées - Les fonctions et procédures peuvent être rendues privées au package et ne peuvent être utilisées qu'à l'intérieur de celui-ci. Cela rend la surface publique plus simple et plus sûre.

Gestion des privilèges - Les autorisations peuvent être accordées une fois pour un groupe de procédures qui fonctionnent ensemble plutôt que séparément pour chaque procédure / fonction requise.

Emballage sécurisé - Les packages enveloppés sont plus difficiles à déballer que les fonctions / procédures encapsulées.

Dénomination simplifiée - Un espace de noms plus grand permet des noms plus simples et peuvent être réutilisés dans d'autres packages.

Meilleures performances - Les packages peuvent être compilés et sont chargés dans la mémoire dans leur intégralité plutôt que de manière fragmentaire comme d'autres méthodes. Cet avantage, s'il existe, est minime par rapport aux autres avantages.

Invalidation réduite - La modification d'un corps de package n'invalide pas les dépendances comme le fait la modification d'une fonction ou d'une procédure.

Caractéristiques uniques - Variables de package, constantes de package, initialisation, état de session, commentaires de package et méthodes surchargées.

Références:
11.2 Concepts Guide
Ask Tom Question
StackOverflow.com Question on Package Performance
Unwrapping PL / SQL Presentation (pdf)


2
Je dois être en désaccord avec l'avantage de performance. Si le chargement de code dans la mémoire est un événement d'attente appréciable, quelque chose de très grave s'est produit. Et il y a une forte possibilité que le fait que les packages réduisent les performances parce que vous devez lire plus de code lorsque vous chargez le package entier alors que vous n'avez vraiment besoin que d'une seule méthode. Dans aucun des cas, cependant, la différence de performance ne sera mesurable.
Justin Cave

@Justin - Ce point provient du Guide des concepts 11.2. Voici ce qu'il dit: "Meilleures performances - Un package entier est chargé en mémoire par petits morceaux lorsqu'une procédure dans le package est appelée pour la première fois. Ce chargement est effectué en une seule opération, par opposition aux charges distinctes requises pour le mode autonome Lorsque des appels à des procédures packagées connexes se produisent, aucune E / S disque n'est nécessaire pour exécuter le code compilé en mémoire. "
Leigh Riffel

4
J'accepte que la documentation affirme qu'il y a un avantage de performance. La documentation est incorrecte ou, au minimum, insuffisante. Dans le meilleur des cas, l'ampleur du "bénéfice" est minuscule. Et le signe de l'avantage est inconnu. Tout comme une analyse de table est plus efficace si vous lisez la plupart des lignes et un accès à l'index est plus efficace si vous lisez une seule ligne, la lecture d'un package entier en mémoire en une seule fois est bénéfique si vous allez utilisez chaque méthode et désavantageux si vous ne voulez vraiment qu'une seule méthode.
Justin Cave

1
@Justin - Votre évaluation semble logique. Je n'ai rien trouvé de définitif dans un sens ou dans l'autre, j'ai donc ajouté une mise en garde au sujet de la réponse. Merci pour votre contribution.
Leigh Riffel

Je pense que cet avantage de performance est similaire à la mise en cache. Si vous utilisez uniquement cette procédure et que vous l'utilisez moins fréquemment, vous n'obtenez aucun avantage en termes de performances. Mais si vous l'utilisez fréquemment et que toute autre procédure est utilisée dans ce package, vous bénéficiez d'avantages. Le développeur tout autour utilise la mise en cache, car ce ne sont pas les performances réelles mais les performances perçues sont améliorées. Étant donné que les procédures associées sont regroupées dans le même package, il est logique que d'autres procédures soient également appelées. Il s'agit de la probabilité d'appeler deux procédures dans le même package. Et normalement, lu avec une forte probabilité, cela se produit.
Atilla Ozgur
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.