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

298

Qu'est-ce qu'une "procédure stockée" et comment fonctionnent-elles?

Quelle est la composition d'une procédure stockée (chaque élément doit être une procédure stockée)?

M--
la source

Réponses:

243

Les procédures stockées sont un lot d'instructions SQL qui peuvent être exécutées de plusieurs manières. La plupart des DBM principaux prennent en charge les procédures stockées; cependant, tous ne le font pas. Vous devrez vérifier avec votre documentation d'aide SGBD particulière pour les détails. Comme je connais très bien SQL Server, je vais l'utiliser comme exemple.

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

CREATE PROCEDURE <owner>.<procedure name>

     <Param> <datatype>

AS

     <Body>

Ainsi, 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 en un seul endroit qui est ensuite facile à optimiser pour les DBA. Les procédures stockées présentent également un avantage en termes de sécurité dans la mesure où vous pouvez accorder des droits d'exécution à une procédure stockée, mais l'utilisateur n'aura pas besoin d'avoir des 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 CRUD de base . Disons 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. Prenez maintenant une base de données de taille décente de 400 tables, et vous avez 1600 procédures! Et cela suppose que vous n'avez pas de doublons, ce que vous aurez 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.

JoshBerke
la source
1
Vous voulez dire la procédure stockée pour lire les données et ORMaimez Entity Frameworkfaire des CRUDopérations?
shaijut
2
Oui, c'est une approche possible. Nous utilisons des ORM pour tout sauf les rapports
JoshBerke
Pour plus de détails sur la procédure stockée, vous pouvez consulter mon URL techflirt.com/mysql-stored-procedure-tutorial
Ankur Kumar Singh
150

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

Exemple: si j'ai une Employeetable

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

Je récupère d'abord le Employeetableau:

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 le Employeetableau, la Nametaille de la colonne doit être varchar(30).

sidhewsar
la source
1
exemple aussi simple à comprendre
HaFiz Umer
80

Une procédure stockée est un groupe d'instructions SQL qui a été créé et stocké dans la base de données. Une procédure stockée acceptera des paramètres d'entrée afin qu'une seule procédure puisse être utilisée sur le réseau par plusieurs clients utilisant différentes données d'entrée. 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 vous le souhaitez 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 qui est effectuée de manière répétitive, les procédures stockées peuvent être plus rapides. Ils sont analysés et optimisés lors de leur première exécution, et une version compilée de la procédure stockée reste dans un cache mémoire pour une utilisation ultérieure. Cela signifie que la procédure stockée n'a pas besoin d'être analysé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 être autorisés à 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 le système sont stockées dans la base de données master et commencent par un sp_préfixe. Ces procédures peuvent être utilisées pour effectuer une variété de tâches pour 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 stockées définies par l'utilisateur sont généralement stockées dans une base de données utilisateur et sont généralement conçues pour effectuer les tâches dans la base de données utilisateur. Bien que le codage de ces procédures n'utilise pas le sp_préfixe, car si nous utilisons d'abord le sp_préfixe, il vérifiera la base de données principale, puis il arrivera à 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, car il serait préférable d'éviter d'utiliser des procédures stockées étendues.

Kanwar Singh
la source
37

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

Il s'agit d'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.

Dave Swersky
la source
16

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 également.
  • Si vous allez insérer les requêtes de base de données en ligne pour accéder à la base de données centrale, à l'intérieur du code de chaque application individuellement, alors vous devrez probablement dupliquer la même requête encore et encore dans le code de différentes applications.
  • Dans ce type 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 (procédures) courantes et les stockez dans la base de données centrale.
  • Désormais, la duplication du travail ne se fera plus comme avant et l'accès aux données et la maintenance se feront 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,
  • Le principal avantage 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, de sorte qu'elles s'exécuteront plus rapidement. Et les coûts de communication (sur les réseaux) seront au minimum.
  • En face de cela, les SP ajouteront une charge supplémentaire au serveur de base de données. Si cela devait être un problème selon la situation, un serveur d'accès aux données centralisé avec des requêtes en ligne serait un meilleur choix.
Supun Wijerathne
la source
9

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

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

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

Supprimez ou supprimez une procédure stockée:

DROP PROCEDURE GetEmployee
utilisateur5723819
la source
6

Une procédure stockée est utilisée pour récupérer des données, modifier des données et supprimer des données dans la table de base de données. Vous n'avez pas besoin d'écrire une commande SQL entière chaque fois que vous souhaitez insérer, mettre à jour ou supprimer des données dans une base de données SQL.

venkat
la source
4
  • 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 seule en utilisant EXEC

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

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

Kedarnath MS
la source
4

"Qu'est-ce qu'une procédure stockée" est déjà répondu dans d'autres articles ici. Ce que je publierai est une façon moins connue d'utiliser la procédure stockée. C'estgrouping stored procedures ou numbering stored procedures.

Référence de syntaxe

entrez la description de l'image ici

; numberselon cela

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 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

entrez la description de l'image ici

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, état 1, procédure SecondTest, ligne 1 [ligne de démarrage par lots 3] Impossible de créer la procédure 'SecondTest' avec un numéro de groupe 2 car une procédure portant le même nom et un numéro de groupe 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 de nombre
  2. Procédures stockées numérotées dans SQL Server - techie-friendly.blogspot.com
  3. Regroupement des procédures stockées - sqlmag

MISE EN GARDE

  1. Après avoir regroupé 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.
Lijo
la source
0

Une procédure stockée est une collection nommée d'instructions SQL et de logique procédurale, c'est-à-dire compilée, vérifiée et stockée 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 via le mécanisme de sécurité du serveur.

Nirmala Hansdak
la source
0

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

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

  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)

Naina
la source
0

pour simple,

Les procédures stockées sont des programmes stockés , un programme / fonction stocké dans la base de données.

Chaque programme stocké contient un corps qui se compose d'une instruction SQL. Cette instruction peut être une instruction composée 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;
AZinkey
la source
0

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, des 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 le BusinessEntityID en tant que paramètre et l'utilise pour faire correspondre la clé primaire de la table HumanResources.Employee pour 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 de essential.com ... c'est très utile.

Jerold Joel
la source
0

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
Biddut
la source
0

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.

  • Dans le cas où vous utilisez un programme tiers dans votre demande de traitement des paiements, ici la base de données ne doit exposer que les informations dont elle avait besoin et l'activité que ce tiers a été autorisé, ce qui nous permet de garantir la confidentialité des données 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 qu'elle cible, mais elle ne doit pas mettre à jour une autre table, grâce à laquelle nous pouvons atteindre l'intégrité des données en utilisant le traitement des transactions et la gestion 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 uniquement un type de données entier, utilisez mieux une valeur de retour. En fait, la valeur de retour sert uniquement à informer le succès ou l'échec de la procédure stockée.
Abhishek Duppati
la source