web-dev-qa-db-fra.com

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 laquelle est la meilleure et pourquoi ... !! J'essayais de google mais je n'ai pas de meilleur article ...

38
arsenal

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 d'application.

Les instructions préparées sont des requêtes écrites avec des espaces réservés au lieu de valeurs réelles. Vous écrivez la requête et elle est compilée une seule fois par le SGBD, puis vous passez simplement des valeurs à placer dans les espaces réservés. 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 relevés préparés. Vous devez les "préparer" chaque fois que vous devez en exécuter un. Les procédures stockées, en revanche, peuvent être stockées, associées à un schéma, mais vous devez connaître PL/SQL pour les écrire.

Vous devez vérifier si votre SGBD les prend en charge.

Les deux sont des outils très utiles, vous voudrez peut-être les combiner.

J'espère que cette courte explication vous sera utile!

49
Throoze

Les autres réponses ont fait allusion à cela, mais je voudrais énumérer explicitement les avantages et les inconvénients:

Procédures stockées

AVANTAGES:

  1. Chaque requête est traitée plus rapidement qu'une requête simple, car le serveur les précompile.
  2. Chaque requête n'a besoin d'être écrite qu'une seule fois. Il peut être exécuté autant de fois que nécessaire, même sur différentes sessions et différentes connexions.
  3. Permet aux requêtes d'inclure des constructions de programmation (telles que des boucles, des instructions conditionnelles et la gestion des erreurs) qui sont soit impossibles soit difficiles à écrire en SQL seul.

LES INCONVÉNIENTS

  1. Exiger la connaissance du langage de programmation utilisé par le serveur de base de données.
  2. Peut parfois nécessiter des autorisations spéciales pour les écrire ou les appeler.

Déclarations préparées

AVANTAGES

  1. Comme les routines stockées, sont rapides car les requêtes sont précompilées.

LES INCONVÉNIENTS

  1. Besoin d'être recompilé avec chaque connexion ou session.
  2. Pour valoir la surcharge, chaque instruction préparée doit être exécutée plusieurs fois (comme dans une boucle). Si une requête n'est exécutée qu'une seule fois, la préparation de l'instruction préparée nécessite plus de temps que vous n'en récupérez, car le serveur doit de toute façon compiler le SQL, mais également effectuer l'instruction préparée.

Pour mon argent, j'irais avec les procédures stockées à chaque fois car elles n'ont besoin d'être écrites et compilées qu'une seule fois. Après cela, chaque appel à la procédure permet de gagner du 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 un peu de temps à apprendre le langage de programmation. Si je n'avais pas l'autorisation d'écrire des procédures stockées, j'utiliserais une instruction préparée, mais seulement si je devais répéter plusieurs fois la même requête plusieurs fois dans la même session.

C'est la conclusion à laquelle je suis parvenu après plusieurs mois de recherche intermittente sur les différences entre ces deux constructions. Si quelqu'un est capable de corriger les mauvaises généralisations que je fais, cela vaudra toute perte de réputation.

13
Randall Stewart

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.) elle est compilée et potentiellement préparée optimisée lorsque vous la 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 à être exécuté chaque fois que vous exécutez l'instruction ... généralement, il est logique lorsqu'une instruction est exécutée plusieurs fois ... en fonction de la Serveur DB (Oracle etc.) et même parfois des options de configuration ces "préparations" sont soit spécifiques à la session soit "globales" ...

Il n'y a pas de "meilleur" lorsque vous comparez ces deux car ils ont leurs cas d'utilisation spécifiques ...

12
Yahia