Procédure stockée : un ensemble de fonctions programmables, qui sont un ensemble d'instructions SQL pour exécuter des fonctions spécifiques. Elles sont compilées, créées et enregistrées dans la base de données. Les utilisateurs peuvent spécifier le nom de la procédure stockée et donner des paramètres (obligatoires). pour appeler à l'exécution.
Cours recommandé : Tutoriel MySQL.
Avantages (pourquoi utiliser des procédures stockées ?) :
① Encapsuler certaines opérations très répétitives dans une procédure stockée, simplifiant ainsi les appels à ces SQL
②Traitement par lots : SQL+boucle, réduisant le trafic, c'est-à-dire "exécuter des lots"
③Interface unifiée pour assurer la sécurité des données
Par rapport à Oracle En ce qui concerne les bases de données, les procédures stockées de MySQL ont des fonctions relativement faibles et sont rarement utilisés.
1. Création et appel de procédures stockées
> Une procédure stockée est un morceau de code avec un nom qui est utilisé pour remplir une fonction spécifique.
>La procédure stockée créée est enregistrée dans le dictionnaire de données de la base de données.
1. Créez une procédure stockée
CREATE [DEFINER = { user | CURRENT_USER }] PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...] routine_body proc_parameter: [ IN | OUT | INOUT ] param_name type characteristic: COMMENT 'string' | LANGUAGE SQL | [NOT] DETERMINISTIC | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } | SQL SECURITY { DEFINER | INVOKER } routine_body: Valid SQL routine statement [begin_label:] BEGIN [statement_list] …… END [end_label]
#Créez une base de données et sauvegardez les tables de données par exemple d'opérations
mysql> create database db1; mysql> use db1; mysql> create table PLAYERS as select * from TENNIS.PLAYERS; mysql> create table MATCHES as select * from TENNIS.MATCHES;
Exemple : Créez une procédure stockée pour supprimer tous les événements dans lesquels un joueur donné participe au Match
mysql> delimiter $$ #将语句的结束符号从分号;临时改为两个$$(可以是自定义) mysql> CREATE PROCEDURE delete_matches(IN p_playerno INTEGER) -> BEGIN -> DELETE FROM MATCHES -> WHERE playerno = p_playerno; -> END$$ Query OK, 0 rows affected (0.01 sec) mysql> delimiter ; #将语句的结束符号恢复为分号
Analyse :
Par défaut, la procédure stockée est associée à la base de données par défaut Si vous souhaitez spécifier que la procédure stockée est créée sous une base de données spécifique, alors. ajoutez le nom de la base de données devant le nom de la procédure. Créez un préfixe ;
Lors de la définition d'une procédure, utilisez la commande DELIMITER $$ pour remplacer temporairement le symbole de fin de l'instruction par deux $$ ; que le point-virgule utilisé dans le corps de la procédure est directement transmis au serveur et ne sera pas interprété par le client (comme mysql).
2. Paramètres des procédures stockées
Une procédure stockée peut avoir 0 ou plusieurs paramètres, qui sont utilisés pour la définition de la procédure stockée.
3 types de paramètres :
Paramètre d'entrée IN : indique que l'appelant transmet une valeur au processus (la valeur entrante peut être un littéral ou une variable)
Paramètre de sortie OUT : Indique que le processus transmet une valeur à l'appelant (peut renvoyer plusieurs valeurs) (la valeur sortante ne peut être qu'une variable)
Paramètres d'entrée et de sortie INOUT : Cela signifie non seulement que l'appelant transmet une valeur à le processus, mais signifie également que le processus transmet une valeur à l'appelant ou à une valeur sortante (la valeur ne peut être qu'une variable)
1 dans le paramètre d'entrée
mysql> delimiter $$ mysql> create procedure in_param(in p_in int) -> begin -> select p_in; -> set p_in=2; -> select P_in; -> end$$ mysql> delimiter ; mysql> set @p_in=1; mysql> call in_param(@p_in);+------+ | p_in | +------+ | 1 | +------+ +------+ | P_in | +------+ | 2 | +------+mysql> select @p_in;+-------+ | @p_in | +-------+ | 1 | +-------+
# Comme on peut le voir. d'après ce qui précède, p_in est modifié pendant le processus de stockage, mais cela n'affecte pas la valeur @p_id, car la première est une variable locale et la seconde est une variable globale.
2. paramètre de sortie out
mysql> delimiter //mysql> create procedure out_param(out p_out int) -> begin -> select p_out; -> set p_out=2; -> select p_out; -> end -> //mysql> delimiter ; mysql> set @p_out=1; mysql> call out_param(@p_out);+-------+ | p_out | +-------+ | NULL | +-------+ #因为out是向调用者输出参数,不接收输入的参数,所以存储过程里的p_out为null+-------+ | p_out | +-------+ | 2 | +-------+mysql> select @p_out;+--------+ | @p_out | +--------+ | 2 | +--------+ #调用了out_param存储过程,输出参数,改变了p_out变量的值
3. paramètre d'entrée inout
mysql> delimiter $$ mysql> create procedure inout_param(inout p_inout int) -> begin -> select p_inout; -> set p_inout=2; -> select p_inout; -> end -> $$ mysql> delimiter ; mysql> set @p_inout=1; mysql> call inout_param(@p_inout);+---------+ | p_inout | +---------+ | 1 | +---------+ +---------+ | p_inout | +---------+ | 2 | +---------+mysql> select @p_inout;+----------+ | @p_inout | +----------+ | 2 | +----------+
#La procédure stockée inout_param est appelée, acceptant les paramètres d'entrée, sortant les paramètres et modifiant le variables
Remarque :
① Si le processus n'a pas de paramètres, vous devez également écrire des parenthèses après le nom du processus
Exemple : CREATE PROCEDURE sp_name ([proc_parameter[,.. .] ]) ...
②Assurez-vous que le nom du paramètre n'est pas égal au nom de la colonne, sinon dans le corps de la procédure, le nom du paramètre sera traité comme un nom de colonne
Fortement recommandé :
> Utilisez le paramètre in pour la valeur d'entrée ;
> utilisez le paramètre out pour la valeur de retour ; paramètre inout le moins possible.
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!