Maison  >  Article  >  base de données  >  Que sont les procédures stockées et les fonctions stockées dans MySQL ?

Que sont les procédures stockées et les fonctions stockées dans MySQL ?

青灯夜游
青灯夜游original
2020-10-15 11:36:143754parcourir

Dans MySQL, les procédures stockées et les fonctions stockées sont un ensemble d'instructions SQL définies dans la base de données. Parmi elles, les fonctions stockées peuvent renvoyer des valeurs de fonction via des instructions return et sont principalement utilisées pour calculer et renvoyer une valeur tandis que les procédures stockées ne renvoient pas directement de valeurs et sont principalement utilisées pour effectuer des opérations ;

Que sont les procédures stockées et les fonctions stockées dans MySQL ?

(Tutoriel recommandé : Tutoriel vidéo MySQL)

Procédure de stockage dans MySQL

L'écriture de procédures stockées n'est pas une tâche simple, mais l'utilisation de procédures stockées peut simplifier les opérations et réduire les étapes d'exploitation redondantes. En même temps, cela peut également réduire les erreurs pendant l'opération et améliorer l'efficacité. vous devriez donc apprendre à utiliser les procédures stockées autant que possible.

Ce qui suit présente principalement comment créer une procédure stockée.

Vous pouvez utiliser l'instruction CREATE PROCEDURE pour créer une procédure stockée Le format de syntaxe est le suivant :

CREATE PROCEDURE <过程名> ( [过程参数[,…] ] ) <过程体>

[Paramètres de procédure[,…]] Format

[ IN | OUT | INOUT ] <参数名> <类型>

La syntaxe est la suivante :

1) Nom de la procédure

Le nom de la procédure stockée, créée dans la base de données courante par défaut. Si vous devez créer une procédure stockée dans une base de données spécifique, faites précéder le nom du nom de la base de données, db_name.sp_name.

Il convient de noter que le nom doit essayer d'éviter de choisir le même nom que la fonction intégrée MySQL, sinon une erreur se produira.

2) Paramètres du processus

stocke la liste des paramètres de la procédure. Parmi eux, 4a82531f3fde107146fdd03610e22e4b est le nom du paramètre et 30690cee1a11d5dfbdced93b89f678ee est le type du paramètre (peut être n'importe quel type de données MySQL valide). Lorsqu'il existe plusieurs paramètres, séparez-les par des virgules dans la liste des paramètres. Une procédure stockée peut ne pas avoir de paramètres (dans ce cas, il faut quand même ajouter une paire de parenthèses après le nom de la procédure stockée), ou bien elle peut avoir un ou plusieurs paramètres.

Les procédures stockées MySQL prennent en charge trois types de paramètres, à savoir les paramètres d'entrée, les paramètres de sortie et les paramètres d'entrée/sortie, qui sont identifiés respectivement par les trois mots-clés IN, OUT et INOUT. Parmi eux, les paramètres d'entrée peuvent être transmis à une procédure stockée, les paramètres de sortie sont utilisés lorsque la procédure stockée doit renvoyer un résultat d'opération, et les paramètres d'entrée/sortie peuvent servir à la fois de paramètres d'entrée et de paramètres de sortie.

Il convient de noter que le nom du paramètre ne doit pas être le même que le nom de la colonne de la table de données. Sinon, bien qu'aucun message d'erreur ne soit renvoyé, l'instruction SQL de la procédure stockée prendra en compte le nom du paramètre. comme nom de colonne, provoquant une erreur.

3) Corps de la procédure

La partie principale de la procédure stockée, également appelée corps de la procédure stockée, contient les instructions SQL qui doivent être exécutées lorsque la procédure est appelée. Cette section commence par le mot-clé BEGIN et se termine par le mot-clé END. S'il n'y a qu'une seule instruction SQL dans le corps de la procédure stockée, l'indicateur BEGIN-END peut être omis.

Dans la création de procédures stockées, une commande MySQL très importante est souvent utilisée, à savoir la commande DELIMITER. Surtout pour les utilisateurs qui exploitent la base de données MySQL via la ligne de commande, ils doivent apprendre à utiliser cette commande.

Dans MySQL, lorsque le serveur traite des instructions SQL, le point-virgule est utilisé par défaut comme marque de fin d'instruction. Cependant, lors de la création d'une procédure stockée, le corps de la procédure stockée peut contenir plusieurs instructions SQL. Si ces instructions SQL utilisent toujours un point-virgule comme terminateur d'instruction, le serveur MySQL se terminera par la première instruction SQL rencontrée lors du traitement. terminateur de l'ensemble du programme et ne traite plus les instructions SQL suivantes dans le corps de la procédure stockée. Cela ne fonctionne évidemment pas.

Pour résoudre les problèmes ci-dessus, la commande DELIMITER est généralement utilisée pour modifier la commande de fin en d'autres caractères.

Le format de la syntaxe est le suivant :

DELIMITER $$

La description de la syntaxe est la suivante :

  • $$ est un utilisateur -terminateur défini, généralement ceci. Le symbole peut être des symboles spéciaux, tels que deux "?" ou deux "¥", etc.

  • Lorsque vous utilisez la commande DELIMITER, vous devez éviter d'utiliser le caractère barre oblique inverse "" car il s'agit d'un caractère d'échappement MySQL.

Entrez l'instruction SQL suivante dans le client de ligne de commande MySQL.

mysql > DELIMITER ??

Après avoir exécuté avec succès cette instruction SQL, la marque de fin de toute commande, instruction ou programme sera remplacée par deux points d'interrogation "??".

Si vous souhaitez revenir au point-virgule par défaut ";" comme marque de fin, saisissez l'instruction suivante dans le client de ligne de commande MySQL :

mysql > DELIMITER ;

Remarque : DELIMITER et point-virgule ";" Il doit y avoir un espace entre eux. Lors de la création d'une procédure stockée, vous devez disposer de l'autorisation CREATE ROUTINE.

Fonctions stockées dans mysql

Dans MySQL, utilisez l'instruction CREATE FUNCTION pour créer une fonction stockée. Sa syntaxe est la suivante :
CREATE FUNCTION sp_name ([func_parameter[...]])
RETURNS type
[characteristic ...] routine_body

Où :

    paramètre sp_name : représente le nom de la fonction stockée
  • func_parameter : représente la liste des paramètres de la fonction stockée ;
  • RETURNS type : Spécifiez le type de valeur de retour
  • paramètre caractéristique : Spécifiez les caractéristiques de la fonction stockée ; de ce paramètre est le même que celui de la procédure stockée. ;
  • paramètre routine_body : représente le contenu du code SQL Vous pouvez utiliser BEGIN...END pour marquer le début et. fin du code SQL.

注意:在具体创建函数时,函数名不能与已经存在的函数名重名。除了上述要求外,推荐函数名命名(标识符)为 function_xxx 或者 func_xxx。

func_parameter 可以由多个参数组成,其中每个参数由参数名称和参数类型组成,其形式如下:
[IN | OUT | INOUT] param_name type;

其中:

  • IN 表示输入参数,OUT 表示输出参数,INOUT 表示既可以输入也可以输出;

  • param_name 参数是存储函数的参数名称;

  • type 参数指定存储函数的参数类型,该类型可以是 MySQL 数据库的任意数据类型。

例 1

使用 CREATE FUNCTION 创建查询 tb_student 表中某个学生姓名的函数,SQL 语句和执行过程如下:

mysql> USE test;
Database changed
mysql> DELIMITER //
mysql> CREATE FUNCTION func_student(id INT(11))
    -> RETURNS VARCHAR(20)
    -> COMMENT &#39;查询某个学生的姓名&#39;
    -> BEGIN
    -> RETURN(SELECT name FROM tb_student WHERE tb_student.id = id);
    -> END //
Query OK, 0 rows affected (0.10 sec)
mysql> DELIMITER ;

上述代码中,创建了 func_student 函数,该函数拥有一个类型为 INT(11) 的参数 id,返回值为 VARCHAR(20) 类型。SELECT 语句从 tb_student 表中查询 id 字段值等于所传入参数 id 值的记录,同时返回该条记录的 name 字段值。

创建函数与创建存储过程一样,需要通过命令 DELIMITER // 将 SQL 语句的结束符由“;”修改为“//”,最后通过命令 DELIMITER ; 将结束符号修改成 SQL 语句中默认的结束符号。

如果在存储函数中的 RETURN 语句返回一个类型不同于函数的 RETURNS 子句中指定类型的值,返回值将被强制为恰当的类型。比如,如果一个函数返回一个 ENUM 或 SET 值,但是 RETURN 语句返回一个整数,对于 SET 成员集的相应的 ENUM 成员,从函数返回的值是字符串。

拓展阅读

由于存储函数和存储过程的查看、修改、删除等操作几乎相同,所以我们不再详细讲解如何操作存储函数了。

查看存储函数的语法如下:

SHOW FUNCTION STATUS LIKE 存储函数名;
SHOW CREATE FUNCTION 存储函数名;
SELECT * FROM information_schema.Routines WHERE ROUTINE_NAME=存储函数名;

可以发现,操作存储函数和操作存储过程不同的是将 PROCEDURE 替换成了 FUNCTION。同样,修改存储函数的语法如下:

ALTER FUNCTION 存储函数名 [ 特征 ... ]

存储函数的特征与存储过程的基本一样。

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:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn