web-dev-qa-db-fra.com

Qu'est-ce qu'une procédure stockée?

Qu'est-ce qu'une procédure stockée? Comment travaillent-ils? Quelle est la composition d'une procédure stockée (chaque doit doit être une procédure stockée)?

264
George Stocker

Les procédures stockées sont un lot d'instructions SQL qui peuvent être exécutées de plusieurs manières. La plupart des principaux DBM prennent en charge les procédures stockées. Cependant, tous ne le font pas. Vous devrez vérifier avec la documentation d'aide de votre SGBD spécifique pour des détails spécifiques. Comme je connais le mieux SQL Server, je l’utiliserai comme exemple. 

Pour créer une procédure stockée, la syntaxe est assez simple:

CREATE PROCEDURE <owner>.<procedure name>

     <Param> <datatype>

AS

     <Body>

Donc par exemple:

CREATE PROCEDURE Users_GetUserInfo

    @login nvarchar(30)=null

AS

    SELECT * from [Users]
    WHERE ISNULL(@login,login)=login

Un avantage des procédures stockées est que vous pouvez centraliser la logique d'accès aux données dans un seul endroit, ce qui est ensuite facile à optimiser pour les administrateurs de bases de données. Les procédures stockées présentent également un avantage en matière de sécurité en ce sens que vous pouvez accorder des droits d'exécution sur une procédure stockée, sans que l'utilisateur n'ait besoin d'autorisations de lecture/écriture sur les tables sous-jacentes. C'est une bonne première étape contre l'injection SQL.

Les procédures stockées comportent des inconvénients, essentiellement la maintenance associée à votre opération de base CRUD . Supposons que pour chaque table, vous avez une insertion, une mise à jour, une suppression et au moins une sélection basée sur la clé primaire, cela signifie que chaque table aura 4 procédures. Maintenant, prenons une base de données de taille décente de 400 tables, et vous avez 1600 procédures! Et cela en supposant que vous n’ayez pas de doublons comme vous le ferez probablement.

C’est là que l’utilisation d’un ORM ou d’une autre méthode pour générer automatiquement vos opérations CRUD de base a une tonne de mérite. 

215
JoshBerke

Une procédure stockée est un ensemble d'instructions SQL précompilées utilisées pour effectuer une tâche spéciale.

Exemple: si j'ai une table Employee

Employee ID  Name       Age  Mobile
---------------------------------------
001          Sidheswar  25   9938885469
002          Pritish    32   9178542436

Je récupère d'abord la table Employee:

Create Procedure Employee details
As
Begin
    Select * from Employee
End

Pour exécuter la procédure sur SQL Server:

Execute   Employee details

--- (Employee details is a user defined name, give a name as you want)

Ensuite, j'insère la valeur dans la table des employés.

Create Procedure employee_insert
    (@EmployeeID int, @Name Varchar(30), @Age int, @Mobile int)
As
Begin
    Insert Into Employee
    Values (@EmployeeID, @Name, @Age, @Mobile)
End

Pour exécuter la procédure paramétrée sur SQL Server:

Execute employee_insert 003,’xyz’,27,1234567890

  --(Parameter size must be same as declared column size)

Exemple: @Name Varchar(30)

Dans la table Employee, la taille de la colonne Name doit être varchar(30).

137
sidhewsar

Une procédure stockée est un groupe d'instructions SQL créées et stockées dans la base de données. Une procédure stockée acceptera les paramètres d'entrée afin qu'une seule procédure puisse être utilisée sur le réseau par plusieurs clients utilisant des données d'entrée différentes. Une procédure stockée réduira le trafic réseau et augmentera les performances. Si nous modifions une procédure stockée, tous les clients recevront la procédure stockée mise à jour.

Exemple de création d'une procédure stockée

CREATE PROCEDURE test_display
AS
    SELECT FirstName, LastName
    FROM tb_test;

EXEC test_display;

Avantages de l'utilisation de procédures stockées

  • Une procédure stockée permet une programmation modulaire.

    Vous pouvez créer la procédure une fois, la stocker dans la base de données et l'appeler autant de fois que nécessaire dans votre programme.

  • Une procédure stockée permet une exécution plus rapide.

    Si l'opération nécessite une grande quantité de code SQL effectuée de manière répétitive, les procédures stockées peuvent être plus rapides. Elles sont analysées et optimisées lors de leur première exécution et une version compilée de la procédure stockée reste dans une mémoire cache pour une utilisation ultérieure. Cela signifie que la procédure stockée n'a pas besoin d'être reparsée et réoptimisée à chaque utilisation, ce qui entraîne des temps d'exécution beaucoup plus rapides.

  • Une procédure stockée peut réduire le trafic réseau.

    Une opération nécessitant des centaines de lignes de code Transact-SQL peut être effectuée via une seule instruction qui exécute le code dans une procédure, plutôt qu'en envoyant des centaines de lignes de code sur le réseau.

  • Les procédures stockées offrent une meilleure sécurité à vos données

    Les utilisateurs peuvent obtenir l'autorisation d'exécuter une procédure stockée même s'ils ne sont pas autorisés à exécuter directement les instructions de la procédure.

    Dans SQL Server, nous avons différents types de procédures stockées:

    • Procédures stockées système
    • Procédures stockées définies par l'utilisateur
    • Procédures stockées étendues
  • Les procédures stockées dans System sont stockées dans la base de données master et commencent par un préfixe sp_. Ces procédures peuvent être utilisées pour effectuer diverses tâches afin de prendre en charge les fonctions SQL Server pour les appels d’applications externes dans les tables système.

    Exemple: sp_helptext [StoredProcedure_Name]

  • Les procédures mémorisées définies par l'utilisateur sont généralement stockées dans une base de données d'utilisateurs et sont généralement conçues pour effectuer les tâches de la base de données d'utilisateurs. Lors de la codification de ces procédures, n’utilisez pas le préfixe sp_ car, si nous utilisons d’abord le préfixe sp_, la base de données master sera vérifiée, puis la base de données définie par l’utilisateur.

  • Les procédures stockées étendues sont les procédures qui appellent des fonctions à partir de fichiers DLL. De nos jours, les procédures stockées étendues sont obsolètes pour la raison qu'il serait préférable d'éviter d'utiliser des procédures stockées étendues.

71
Kanwar Singh

En règle générale, une procédure stockée est une "fonction SQL". Ils ont:

-- a name
CREATE PROCEDURE spGetPerson
-- parameters
CREATE PROCEDURE spGetPerson(@PersonID int)
-- a body
CREATE PROCEDURE spGetPerson(@PersonID int)
AS
SELECT FirstName, LastName ....
FROM People
WHERE PersonID = @PersonID

Ceci est un exemple axé sur T-SQL. Les procédures stockées peuvent exécuter la plupart des instructions SQL, renvoyer des valeurs scalaires et basées sur des tables et sont considérées comme plus sécurisées car elles empêchent les attaques par injection SQL. 

33
Dave Swersky

Pensez à une situation comme celle-ci,

  • Vous avez une base de données avec des données.
  • Un certain nombre d'applications différentes sont nécessaires pour accéder à cette base de données centrale et, à l'avenir, à de nouvelles applications.
  • Si vous souhaitez insérer les requêtes de base de données en ligne pour accéder à la base de données centrale, dans le code de chaque application individuellement, vous devrez probablement dupliquer la même requête à plusieurs reprises dans le code de différentes applications.
  • Dans ce genre de situation, vous pouvez utiliser des procédures stockées (SP). Avec les procédures stockées, vous écrivez un certain nombre de requêtes courantes (procédures) et les stockez dans la base de données centrale. 
  • Maintenant, la duplication du travail ne se produira plus comme avant et l'accès aux données et la maintenance seront effectués de manière centralisée.

REMARQUE:

  • Dans la situation ci-dessus, vous pouvez vous demander "Pourquoi ne pouvons-nous pas introduire un serveur central d'accès aux données pour interagir avec toutes les applications? Oui. Ce sera une alternative possible. Mais,
  • L'avantage principal des SP par rapport à cette approche est que, contrairement à votre code d'accès aux données avec des requêtes en ligne, les SP sont des instructions précompilées, leur exécution est donc plus rapide. Et les coûts de communication (sur les réseaux) seront réduits au minimum.
  • Contrairement à cela, les SP ajouteront une charge supplémentaire au serveur de base de données. Si cela peut poser problème en fonction de la situation, un serveur d'accès aux données centralisé avec requêtes en ligne constituera un meilleur choix.
14
Supun Wijerathne

Une procédure stockée est principalement utilisée pour effectuer certaines tâches sur une base de données. Par exemple

  • Obtenir des ensembles de résultats de base de données à partir d'une logique métier sur des données. 
  • Exécuter plusieurs opérations de base de données en un seul appel.
  • Utilisé pour migrer les données d'une table à une autre.
  • Peut être appelé pour d'autres langages de programmation, comme Java.
7
MAA

Une procédure stockée est utilisée pour extraire des données, modifier des données et supprimer des données dans la table de base de données. Il n'est pas nécessaire d'écrire une commande SQL complète chaque fois que vous souhaitez insérer, mettre à jour ou supprimer des données dans une base de données SQL.

5
venkat

Une procédure stockée n'est rien d'autre qu'un groupe d'instructions SQL compilées dans un seul plan d'exécution.

  1. Créez une fois et appelez-le n nombre de fois
  2. Il réduit le trafic réseau

Exemple: création d'une procédure stockée

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE GetEmployee
      @EmployeeID int = 0
AS
BEGIN
      SET NOCOUNT ON;

      SELECT FirstName, LastName, BirthDate, City, Country
      FROM Employees 
      WHERE EmployeeID = @EmployeeID
END
GO

Modifier ou modifier une procédure stockée:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE GetEmployee
      @EmployeeID int = 0
AS
BEGIN
    SET NOCOUNT ON;

    SELECT FirstName, LastName, BirthDate, City, Country
    FROM Employees 
    WHERE EmployeeID = @EmployeeID
END
GO

Supprimer ou supprimer une procédure stockée:

DROP PROCEDURE GetEmployee
5
user5723819
  • Une procédure stockée est un ensemble précompilé d'une ou plusieurs instructions SQL qui effectuent une tâche spécifique.

  • Une procédure stockée doit être exécutée de manière autonome à l'aide de EXEC

  • Une procédure stockée peut renvoyer plusieurs paramètres

  • Une procédure stockée peut être utilisée pour implémenter transact

3
Kedarnath M S

"Qu'est-ce qu'une procédure stockée" est déjà répondu dans d'autres messages ici. Ce que je vais poster est un moyen moins connu d’utiliser une procédure stockée. C'est grouping stored procedures ou numbering stored procedures.

Référence de syntaxe

 enter image description here

; number selon this

Un entier facultatif utilisé pour regrouper les procédures du même nom. Ces procédures groupées peuvent être supprimées ensemble à l’aide d’une seule instruction DROP PROCEDURE.

Exemple

CREATE Procedure FirstTest 
(
    @InputA INT
)
AS 
BEGIN
    SELECT 'A' + CONVERT(VARCHAR(10),@InputA)
END
GO

CREATE Procedure FirstTest;2
(
    @InputA INT,
    @InputB INT
)
AS 
BEGIN
    SELECT 'A' + CONVERT(VARCHAR(10),@InputA)+ CONVERT(VARCHAR(10),@InputB)
END
GO

Utilisation 

exec FirstTest 10
exec FirstTest;2 20,30

Résultat

 enter image description here

Une autre tentative

CREATE Procedure SecondTest;2
(
     @InputA INT,
    @InputB INT
)
AS 
BEGIN
    SELECT 'A' + CONVERT(VARCHAR(10),@InputA)+ CONVERT(VARCHAR(10),@InputB)
END
GO

Résultat

Msg 2730, Niveau 11, Etat 1, Procédure SecondTest, Ligne 1 [Ligne de départ lot 3] Impossible de créer la procédure 'SecondTest' avec un numéro de groupe de 2 car une procédure portant le même nom et un numéro de groupe de 1 n'existe pas actuellement dans la base de données . Doit exécuter CREATE PROCEDURE 'SecondTest'; 1 en premier.

Références:

  1. CREATE PROCEDURE avec la syntaxe pour le nombre
  2. Procédures stockées numérotées dans SQL Server - techie-friendly.blogspot.com
  3. Regroupement de procédures stockées - sqlmag

MISE EN GARDE

  1. Après avoir groupé les procédures, vous ne pouvez pas les supprimer individuellement.
  2. Cette fonctionnalité peut être supprimée dans une future version de Microsoft SQL Server. 
2
Lijo

pour simple,

Procédure stockée are Programmes stockés , Programme/fonction stocké dans la base de données.

Chaque programme stocké contient un corps qui consiste en une instruction SQL. Cette instruction peut être une instruction composée de plusieurs instructions séparées par des points-virgules (;).

CREATE PROCEDURE dorepeat(p1 INT)
BEGIN
  SET @x = 0;
  REPEAT SET @x = @x + 1; UNTIL @x > p1 END REPEAT;
END;
0
AZinkey

Dans un SGBD, une procédure stockée est un ensemble d'instructions SQL avec un nom attribué, stocké dans la base de données sous une forme compilée, de sorte qu'il puisse être partagé par plusieurs programmes.

L'utilisation d'une procédure stockée peut être utile dans 

  1. Fournir un accès contrôlé aux données (les utilisateurs finaux peuvent uniquement saisir ou modifier des données, mais ne peuvent pas écrire de procédures)

  2. Assurer l'intégrité des données (les données seraient saisies de manière cohérente) et

  3. Améliore la productivité (les instructions d'une procédure stockée ne doivent être écrites qu'une seule fois)

0
Naina

Les procédures stockées dans SQL Server peuvent accepter des paramètres d'entrée et renvoyer plusieurs valeurs de paramètres de sortie. dans SQL Server, instructions de programme de procédures stockées pour effectuer des opérations dans la base de données et renvoyer une valeur d'état à une procédure ou à un lot appelant.

Les avantages de l'utilisation de procédures stockées dans SQL Server

Ils permettent une programmation modulaire… .. Ils permettent une exécution plus rapide… >> Ils peuvent réduire le trafic réseau… .. Ils peuvent être utilisés comme mécanisme de sécurité.

Voici un exemple de procédure stockée qui prend un paramètre, exécute une requête et renvoie un résultat. Plus précisément, la procédure stockée accepte BusinessEntityID en tant que paramètre et l'utilise pour faire correspondre la clé primaire de la table HumanResources.Employee afin de renvoyer l'employé demandé.

> create procedure HumanResources.uspFindEmployee    `*<<<---Store procedure name`*
@businessEntityID                                     `<<<----parameter`
as
begin
SET NOCOUNT ON;
Select businessEntityId,              <<<----select statement to return one employee row
NationalIdNumber,
LoginID,
JobTitle,
HireData,
From HumanResources.Employee
where businessEntityId =@businessEntityId     <<<---parameter used as criteria
end

J'ai appris cela sur essential.com ... c'est très utile.

0
Jammy Nemo

Dans les procédures stockées, les instructions ne sont écrites qu’une seule fois et réduisent le trafic réseau entre les clients et les serveurs .. Nous pouvons également éviter les attaques par injection SQL.

  • Si vous utilisez un programme tiers dans votre application pour le traitement des paiements .__, la base de données ne devrait exposer que les informations Dont il avait besoin et l'activité que ce tiers a été autorisé , Nous pouvons ainsi obtenir des données. confidentialité en définissant des autorisations à l'aide de procédures stockées.
  • La mise à jour de la table ne doit être effectuée que sur la table ciblée Mais ne devrait mettre à jour aucune autre table permettant d’atteindre L’intégrité des données à l’aide du traitement des transactions et du traitement des erreurs.
  • Si vous souhaitez renvoyer un ou plusieurs éléments avec un type de données, il est préférable d'utiliser un paramètre de sortie.
  • Dans les procédures stockées, nous utilisons un paramètre de sortie pour tout ce qui doit être retourné Si vous souhaitez renvoyer un seul élément avec seulementun type de données entier, utilisez plutôt une valeur de retour. En réalité, la valeur de retour Sert uniquement à informer du succès ou de l’échec de la procédure stockée
0
Abhishek Duppati

La procédure stockée vous aidera à créer du code sur le serveur. Vous pouvez passer des paramètres et rechercher une sortie.

create procedure_name (para1 int,para2 decimal)
as
select * from TableName
0
Biddut

Une procédure stockée est une collection nommée d'instructions SQL et de logique procédurale, compilées, vérifiées et stockées dans la base de données du serveur. Une procédure stockée est généralement traitée comme les autres objets de base de données et contrôlée par le mécanisme de sécurité du serveur.

0
Nirmala Hansdak