Maison  >  Article  >  base de données  >  Introduction détaillée aux procédures stockées MySQL (exemple de code)

Introduction détaillée aux procédures stockées MySQL (exemple de code)

不言
不言avant
2019-02-27 13:42:442883parcourir

Cet article vous apporte une introduction détaillée (exemple de code) sur la procédure stockée MySQL. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.

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

Une collection d'une ou plusieurs instructions MySQL enregistrées pour une utilisation ultérieure.

L'idée des procédures stockées est l'encapsulation du code et la réutilisation au niveau du langage SQL de la base de données.

(Recommandations associées : Tutoriel MySQL)

2. Pourquoi utiliser des procédures stockées

  1. Encapsuler traitement en unités faciles à utiliser pour simplifier les opérations complexes

  2. Prévenir les erreurs et assurer la cohérence des données

  3. Simplifier la réponse aux changements à gérer. (Modifiez le nom de la table, le nom de la colonne, etc. correspondants pour modifier le code de la procédure stockée correspondante. Les personnes qui l'utilisent n'ont pas besoin de connaître les modifications)

  4. Améliorer les performances

  5. Flexible

En général, c'est simple, sûr et performant
Inconvénients :

  1. C'est plus compliqué à écrire que des instructions SQL

  2. Problèmes d'autorisation (peut ne pas avoir d'autorisation, utiliser généralement des procédures stockées, ne pas avoir l'autorisation de créer des procédures stockées)

3. Créer des procédures stockées

CREATE  PROCEDURE productpricing()
BEGIN
SELECT Avg(prod_price) AS priceaverage
FROM products;
END

Remarque : problèmes de saisie dans la ligne de commande

mysql> delimiter //
mysql> CREATE PROCEDURE productpricing()
    -> BEGIN
    -> SELECT Avg(prod_price) AS priceaverage
    -> FROM products;
    -> END //

4. 🎜>

Une procédure stockée est en fait une fonction

CALL productpricing();
4. Supprimer la procédure stockée

    drop procedure productpricing;
    drop procedure if EXISTS productpricing;
Utiliser les paramètres

Généralement, la procédure stockée. La procédure n'affiche pas les résultats, mais renvoie les résultats à la variable spécifiée

Une variable est un emplacement spécifique en mémoire utilisé pour stocker temporairement des données.

CREATE PROCEDURE productpricing(
    OUT p1 DECIMAL(8,2),
    OUT ph DECIMAL(8,2),
    OUT pa DECIMAL(8,2)
)
BEGIN
SELECT MIN(prod_price)
INTO p1
FROM products;
SELECT MAX(prod_price)
INTO ph
FROM products;
SELECT avg(prod_price)
INTO pa
FROM products;
END;
Le mot-clé OUT indique que le paramètre correspondant permet de passer une valeur de la procédure stockée (retour à l'appelant).

MySQL prend en charge les paramètres de type IN (passés aux procédures stockées),
OUT (passés à partir des procédures stockées, telles qu'utilisées ici)
INOUT (passés aux procédures stockées).

Nom de la variable Toutes les variables MySQL doivent commencer par @.


Appel d'une procédure stockée

call productpricing(@pricelow,@pricehign,@priceaverage);

Requête

SELECT @priceaverage;
SELECT @priceaverage,@pricehign,@pricelow;

Utilisation entrée et sortie Créer

CREATE PROCEDURE ordertotal(
    IN onumber INT,
    OUT ototal DECIMAL(8,2)
)
BEGIN
SELECT sum(item_price*quantity)
FROM orderitems
WHERE order_num = onumber
INTO ototal;
END;
Appeler

call ordertotal(20005,@total);
Requête

select @total;
6. Créer des procédures stockées intelligentes

Toutes utilisées jusqu'à présent Stockées les procédures encapsulent essentiellement les simples instructions SELECT de MySQL. Bien qu'elles soient toutes des exemples valables de procédures stockées, elles peuvent faire ce que vous pouvez directement utiliser ces instructions encapsulées (si elles peuvent apporter quelque chose de plus, c'est pour compliquer les choses). La puissance des procédures stockées n’apparaît véritablement que lorsqu’elles incluent des règles métier et un traitement intelligent.

   考虑这个场景。你需要获得与以前一样的订单合计,但需要对合计增加营业税,不过只针对某些顾客(或许是你所在州中那些顾客)。那么,你需要做下面几件事情:
   1、获得合计(和以前一样)
   2、把营业税有条件的添加到合计
   3、返回合计(带或不带税的)
On rentre le code suivant :

-- Name: ordertotal        //   添加注释
-- Parameters: onumber = order number
--             taxable = 0 if not taxable, 1 if taxtable
--             ototal = order total variable

CREATE     PROCEDURE ordertotal (
IN onumber INT,
IN taxable BOOLEAN,
OUT ototal DECIMAL(8,2)
) COMMENT 'Obtain order total, optionally adding tax'
BEGIN
    
        -- Declare variable for total
        DECLARE total DECIMAL(8,2);     //   声明变量   
        -- Declare tax percentage
        DECLARE taxrate INT DEFAULT 6;
        
        -- Get the order total
        SELECT Sum(item_price*quantity)
        FROM orderitems
        WHERE order_num = onumber
        INTO total;
        
        -- Is this taxable?
        IF taxable THEN
            -- yes,so add taxrate to the total
            SELECT total+(total/100*taxrate) INTO total;
        END IF;
        --  And finally, save to out variable
        SELECT total INTO ototal;
END;
此存储过程有很大的变动。首先,增加了注释(前面放置 --)。在存储过程复杂性增加时,这样做特别重要。  
添加了另外一个参数 taxable,它是一个布尔值(如果要增加税则为真,否则为假)。  
在存储过程体中,用 DECLARE语句定义了两个局部变量。 DECLARE要求指定变量名和数据类型,
它也支持可选的默认值(这个例子中的 taxrate的默认被设置为 6%)。SELECT 语句变,因此其结果存储到 total(局部变量)而不是 ototal。  
IF 语句检查taxable是否为真,如果为真,则用另一SELECT语句增加营业税到局部变量 total。

最后,用另一SELECT语句将total(它增加或许不增加营业税)保存到 ototal。  
注意:COMMENT关键字 ,本例子中的存储过程在 CREATE PROCEDURE语句中包含了一个 COMMENT值。  
它不是必需的,但如果给出,将在SHOW PROCEDURE STATUS的结果中显示。

这显然是一个更高级,功能更强的存储过程。为试验它,请用以下两条语句:  
第一条:
call ordertotal(20005, 0, @total);
SELECT @total;
输出:
+--------+
| @total |
+--------+
|  38.47 |
+--------+
第二条:
call ordertotal(20009, 1,@total);
SELECT @total;
输出:
+--------+
| @total |
+--------+
|  36.21 |
+--------+
BOOLEAN值指定为1 表示真,指定为 0表示假(实际上,非零值都考虑为真,只有 0被视为假)。通过给中间的参数指定 0或1 ,可以有条件地将营业税加到订单合计上。
Cet exemple donne l'utilisation de base de l'instruction IF de MySQL. L'instruction IF prend également en charge les clauses ELSEIF et ELSE (la première utilise également la clause THEN, la seconde non). Nous verrons d'autres utilisations de IF (et d'autres instructions de contrôle de flux) dans les prochains chapitres.

7. Vérifiez la procédure stockée

Pour afficher l'instruction CREATE utilisée pour créer une procédure stockée

show create PROCEDURE ordertotal;
Pour obtenir des informations détaillées, notamment quand et par qui elle a été créée Il existe de nombreuses listes de procédures stockées

show procedure status;
, utilisez like pour filtrer

show procedure status like 'ordertotal';

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer