Différence entre les procédures stockées et les déclarations préparées..?
Quelle est la différence entre les procédures stockées et les déclarations préparées... Et lequel est le meilleur et pourquoi...!! J'ai cherché sur google, mais je n'ai pas de meilleur article...
3 réponses
les procédures stockées sont une séquence d'instructions en langage PL/SQL. Est un langage de programmation implémenté par certains SGBD, qui vous permet de stocker des séquences de requêtes fréquemment appliquées à votre modèle, et de partager la charge de traitement avec la couche application.
les énoncés préparés sont des requêtes écrites avec des placeholders au lieu de valeurs réelles. Vous écrivez la requête et elle est compilée juste une fois par le SGBD, et ensuite vous passez juste les valeurs à placer dans les espaces réservés. Le l'avantage d'utiliser des instructions préparées est que vous améliorez considérablement les performances et protégez vos applications de L'Injection SQL.
la différence est que vous ne pouvez pas stocker les déclarations préparées. Vous devez "les préparer" chaque fois que vous avez besoin d'exécuter un. Procédures stockées, d'autre part, peuvent être stockées, associé à un schéma, mais vous devez savoir PL/SQL pour les écrire.
vous devez vérifier si votre SGBD les supporte.
les deux sont des outils très utiles, vous pourriez combiner.
espérons que cette brève explication vous sera utile!
une procédure stockée est stockée dans la base de données-en fonction de la base de données (Oracle, MS SQL Server, etc.).) il est compilé et potentiellement préparé optimisé lorsque vous créez sur le serveur...
une instruction préparée est une instruction qui est analysée par le serveur et un plan d'exécution est créé par le serveur prêt pour l'exécution chaque fois que vous exécutez l'instruction... habituellement, il est logique lorsque l'exécution d'une instruction plus d'une fois... en fonction du serveur DB(Oracle etc.) et même parfois options de configuration cette " préparation "est spécifique à la session ou"globale"...
il n'y a pas de "meilleur" quand vous comparez ces deux-là puisqu'ils ont leurs cas d'utilisation spécifiques...
Les autres réponses ont fait allusion à cela, mais j'aimerais lister les avantages et les Inconvénients de manière explicite:
Procédures Stockées
PROS:
- chaque requête est traitée plus rapidement qu'une requête simple, car le serveur les compile à l'avance.
- chaque requête ne doit être écrite qu'une seule fois. Il peut être exécuté autant de fois que nécessaire, même à travers différentes sessions et différentes connexions.
- permet aux requêtes d'inclure les constructions de programmation (telles que les boucles, les déclarations conditionnelles, et la manipulation d'erreurs) qui sont soit impossibles ou difficiles à écrire en SQL seul.
CONS
- exigent la connaissance du langage de programmation utilisé par le serveur de base de données.
- peut parfois exiger des permissions spéciales pour les écrire ou les appeler.
Déclarations Préparées
PROS
- comme les routines stockées, sont rapides parce que les requêtes sont pré-compilées.
CONS
- besoin d'être réécrit à chaque connexion ou session.
- Pour être en vaut la surcharge, chaque instruction préparée doit être exécuté plus d'une fois (comme dans une boucle). Si une requête est exécutée une seule fois, plus de frais généraux vont dans la préparation de la déclaration préparée que vous obtenez en arrière puisque le serveur doit compiler le SQL de toute façon, mais aussi faire le préparé déclaration.
pour mon argent, j'utiliserais des procédures stockées à chaque fois puisqu'elles n'ont besoin d'être écrites qu'une seule fois. Après cela, chaque appel à la procédure conduit à un gain de temps, que vous soyez sur une nouvelle connexion ou non, et que vous appeliez la procédure en boucle ou non. Le seul inconvénient est de devoir passer du temps à apprendre le langage de programmation. Si je n'avais pas les permissions pour écrire des procédures stockées, j'utiliserais une déclaration préparée, mais seulement si je devais faites plusieurs fois la même requête dans la même session.
C'est la conclusion à laquelle je suis arrivé après plusieurs mois de recherches continues sur les différences entre ces deux concepts. Si quelqu'un est capable de corriger les mauvaises généralisations que je fais, cela vaudra la peine d'une perte de réputation.