Maison base de données tutoriel mysql 详解MySQL存储过程参数有三种类型(in、out、inout)_MySQL

详解MySQL存储过程参数有三种类型(in、out、inout)_MySQL

Jun 01, 2016 pm 01:22 PM
c语言

bitsCN.com 一、MySQL 存储过程参数(in)
MySQL 存储过程 “in” 参数:跟 C 语言的函数参数的值传递类似, MySQL 存储过程内部可能会修改此参数,但对 in 类型参数的修改,对调用者(caller)来说是不可见的(not visible)。

drop procedure if exists pr_param_in;
create procedure pr_param_in
(
in id int -- in 类型的 MySQL 存储过程参数
)
begin
if (id is not null) then
set id = id + 1;
end if;
select id as id_inner;
end;
set @id = 10;
call pr_param_in(@id);
select @id as id_out;
mysql> call pr_param_in(@id);

+----------+
| id_inner |
+----------+
| 11 |
+----------+
mysql> select @id as id_out;
+--------+
| id_out |
+--------+
| 10 |
+--------+
可以看到:用户变量 @id 传入值为 10,执行存储过程后,在过程内部值为:11(id_inner),但外部变量值依旧为:10(id_out)。

二、MySQL 存储过程参数(out)
MySQL 存储过程 “out” 参数:从存储过程内部传值给调用者。在存储过程内部,该参数初始值为 null,无论调用者是否给存储过程参数设置值。

drop procedure if exists pr_param_out;
create procedure pr_param_out
(
out id int
)
begin
select id as id_inner_1; -- id 初始值为 null
if (id is not null) then
set id = id + 1;
select id as id_inner_2;
else
select 1 into id;
end if;
select id as id_inner_3;
end;
set @id = 10;
call pr_param_out(@id);
select @id as id_out;
mysql> set @id = 10;
mysql>
mysql> call pr_param_out(@id);

+------------+
| id_inner_1 |
+------------+
| NULL |
+------------+
+------------+
| id_inner_3 |
+------------+
| 1 |
+------------+
mysql> select @id as id_out;
+--------+
| id_out |
+--------+
| 1 |
+--------+
可以看出,虽然我们设置了用户定义变量 @id 为 10,传递 @id 给存储过程后,在存储过程内部,id 的初始值总是 null(id_inner_1)。最后 id 值(id_out = 1)传回给调用者。

三、MySQL 存储过程参数(inout)
MySQL 存储过程 inout 参数跟 out 类似,都可以从存储过程内部传值给调用者。不同的是:调用者还可以通过 inout 参数传递值给存储过程。

drop procedure if exists pr_param_inout;
create procedure pr_param_inout
(
inout id int
)
begin
select id as id_inner_1; -- id 值为调用者传进来的值
if (id is not null) then
set id = id + 1;
select id as id_inner_2;
else
select 1 into id;
end if;
select id as id_inner_3;
end;
set @id = 10;
call pr_param_inout(@id);
select @id as id_out;
mysql> set @id = 10;
mysql>
mysql> call pr_param_inout(@id);

+------------+
| id_inner_1 |
+------------+
| 10 |
+------------+
+------------+
| id_inner_2 |
+------------+
| 11 |
+------------+
+------------+
| id_inner_3 |
+------------+
| 11 |
+------------+
mysql>
mysql> select @id as id_out;
+--------+
| id_out |
+--------+
| 11 |
+--------+
从结果可以看出:我们把 @id(10),传给存储过程后,存储过程最后又把计算结果值 11(id_inner_3)传回给调用者。 MySQL 存储过程 inout 参数的行为跟 C 语言函数中的引用传值类似。

通 过以上例子:如果仅仅想把数据传给 MySQL 存储过程,那就使用“in” 类型参数;如果仅仅从 MySQL 存储过程返回值,那就使用“out” 类型参数;如果需要把数据传给 MySQL 存储过程,还要经过一些计算后再传回给我们,此时,要使用“inout” 类型参数。bitsCN.com

Déclaration de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Que signifie réel en langage C Que signifie réel en langage C May 09, 2024 pm 12:06 PM

real est le type de données utilisé pour représenter les nombres à virgule flottante double précision en langage C. Il occupe 8 octets, a une précision d'environ 15 décimales et la plage est [-1,7976931348623157e+308, 1,7976931348623157e+308].

Comment implémenter la fonction power en langage C Comment implémenter la fonction power en langage C May 09, 2024 pm 11:33 PM

En langage C, il existe deux manières d'implémenter l'opération d'exponentiation : utiliser la fonction pow() pour calculer la puissance du deuxième paramètre du premier paramètre. Définissez une fonction de puissance personnalisée, qui peut être implémentée de manière récursive ou itérative : la méthode récursive continue de doubler la puissance jusqu'à ce qu'elle atteigne 0. La méthode itérative utilise une boucle pour multiplier la base une par une.

Que faire s'il y a une erreur dans scanf en langage C Que faire s'il y a une erreur dans scanf en langage C May 09, 2024 am 11:39 AM

En langage C, les méthodes de gestion des erreurs de la fonction scanf incluent : 1. Vérifiez la chaîne de format ; 2. Vérifiez l'entrée ; 3. Vérifiez la valeur de retour ; 4. Définissez l'indicateur d'erreur ; les erreurs personnalisées sont traitées. Pour éviter les erreurs, utilisez les types de données corrects, validez soigneusement les entrées, vérifiez les valeurs de retour et gérez les erreurs potentielles dans votre programme.

Comment utiliser ElemType en langage C Comment utiliser ElemType en langage C May 09, 2024 pm 12:03 PM

ElemType est un type de données en langage C qui représente le type d'éléments dans un tableau ou une structure. Il est utilisé pour déclarer les types d’éléments de tableau, définir les types de membres de structure et dans les fonctions et macros génériques. Notez qu'ElemType n'est pas un mot réservé et peut être remplacé par un autre nom.

Le rôle des scanfs en langage C Le rôle des scanfs en langage C May 09, 2024 am 11:30 AM

La fonction scanfs est utilisée en langage C pour lire les données formatées à partir de l'entrée standard et stocker les données lues dans la variable spécifiée. Il lit les données selon le spécificateur de format (tel que %d, %f) spécifié par le paramètre format et stocke les données dans l'adresse de variable spécifiée dans le paramètre .... La fonction scanfs renvoie le nombre d'éléments de données lus avec succès, ou -1 si la lecture échoue.

Comment utiliser malloc en langage C Comment utiliser malloc en langage C May 09, 2024 am 11:54 AM

La fonction malloc() en langage C alloue un bloc mémoire dynamique et renvoie un pointeur vers l'adresse de départ. Utilisation : Allouer de la mémoire : malloc(size) alloue un bloc mémoire de la taille spécifiée. Travailler avec la mémoire : accéder et manipuler la mémoire allouée. Libérer la mémoire : free(ptr) libère la mémoire allouée. Avantages : Permet l'allocation dynamique de la mémoire requise et évite les fuites de mémoire. Inconvénients : Le renvoi de NULL en cas d'échec de l'allocation peut entraîner le blocage du programme. Une gestion minutieuse est nécessaire pour éviter les fuites de mémoire et les erreurs.

La signification de cout en langage C La signification de cout en langage C May 09, 2024 pm 12:48 PM

En C++, cout est un objet de flux de sortie standard utilisé pour écrire des données sur la console ou le périphérique de sortie, permettant aux programmeurs d'imprimer des informations sur un terminal ou un fichier. Ses fonctions incluent : l'impression de texte, de chiffres et de valeurs variables sur la console. Utilisez les options de formatage pour formater la sortie. Prend en charge l'opérateur d'insertion (<<) pour écrire des données dans le flux. Peut être utilisé avec d'autres opérateurs de flux tels que endl pour effectuer des opérations spécifiques.

Quelles sont les méthodes d'affectation de tableaux en langage C ? Quelles sont les méthodes d'affectation de tableaux en langage C ? May 09, 2024 pm 11:51 PM

Il existe six méthodes d'affectation de tableau en langage C : 1. affectation directe ; 2. utiliser l'initialiseur de tableau ; 3. utiliser des pointeurs ; 5. utiliser la fonction memcpy() ;

See all articles