mysql存储过程 long_MySQL 存储过程入门

本文详细介绍了MySQL存储过程的创建、调用及其各种参数类型,包括输入参数、输出参数和输入输出参数,并展示了带有条件判断和循环功能的存储过程示例。此外,还讲解了全局变量、会话变量和局部变量的使用,并提供了删除存储过程的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

存储过程是带有逻辑的SQL语句,优点是执行效率高。缺点是可移植性差

1、存储过程语法

DELIMITER $ --声明结束符

CREATE PROCEDURE pro_test() --创建存储过程  存储过程名称(参数列表)

BEGIN

SELECT * FROM employee --可以写多条SQL语句  SQL语句+流程控制

END $ --结束

2、调用存储过程

CALL pro_test --CALL 存储过程名称

3、储存过程参数

IN            表示输入参数

OUT         表示输出参数

INOUT     表示输入、输出参数

3.1带有输入参数的存储过程

需求:通过传入一个员工的id,查询员工信息

DELIMITER $CREATE PROCEDURE pro_findById(IN eid INT) --IN: 输入参数

BEGIN

SELECT * FROM employee WHERE id =eid;END $

调用

CALL pro_findById(2);

3.2 带有输出参数的存储过程

DELIMITER $CREATE PROCEDURE pro_testOut (OUT str VARCHAR(20))BEGIN

SET str="这是一个输出参数";END $

调用带返回参数的存储过程

先介绍下MySQL变量1、全局变量(内置变量)

查看所有全局变量 show variables

查看跟字符集有关的全局变量 SHOW VARIABLES LIKE 'character_%';

查看某个全局变量 SELECT @@变量名

修改全局变量 SET 变量名=新值

常用全局变量--character_set_client : mysql服务器能够接收数据的编码

--character_set_results : mysql服务器输出数据的编码

2、会话变量:只存在于当前的客户端与数据库服务器端的一次连接当中,如果连接断开,会话丢失

定义一个会话变量 SET @变量=值

查看会话变量 SELECT @变量

3、局部变量:在存储过程中使用的变量 就是存储变量,只存储过程执行完毕,那么局部变量就会消失。

变量介绍完,现在说明如何调用带输出参数的存储过程

1、定义一个会话变量

CALL pro_testOut(@NAME) //1)定义一个会话变量NAME,2)使用NAME会话变量

2、查看会话变量

SELECT @NAME;

3.3带有输入输出参数的存储过程

DELIMITER $CREATE PROCEDURE pro_testInOut(INOUT n INT) --INOUT输入输出参数

BEGIN

SELECT n; --作为输入参数传入存储过程, 该变量变为局部变量 不用加'@',但在存储过程外仍然是会话变量

SET n = 500;END$--调用

输入SET @n = 10;

CALL pro_testInOut(@n); --结果输出10

输入SELECT @n; --结果输出500

4、带有条件判断的存储过程

需求:输入一个整数。如果为1,则返回“星期一”,如果是2,则返回“星期二”,如果是3,则返回“星期三”。如果 是其他数值,返回“错误的数值”

DELIMITER $CREATE PROCEDURE pro_testIf(IN num INT, OUT str VARCHAR(10))BEGIN

IF num = 1 THEN

SET str="星期一";

ELSEIF num= 2 THEN

SET str ="星期二";

ELSEIF num= 3 THEN

SET str ="星期三";

ELSE SET str = "输入的值不在指定范围内";END IF;END$--调用

CALL pro_testIF(1, @str);SELECT @str;

5、带有循环功能的存储过程

--需求:输入一个整数,求和。例如输入100.求1-100的和

DELIMITER $CREATE PROCEDURE pro_testWhile(IN num INT, OUT result INT)BEGIN

--定义一个局部变量

DECLARE i INT DEFAULT 1;DECLARE vsum INT DEFAULT 0;WHILE i<=numDOSET vsum = vsum +i;SET i = i+1;END WHILE;SET result =vsum;END$--调用

CALL pro_testWhile(100, @result);SELECT @result;

6、使用查询结果作为返回值

DELIMITER $CREATE PROCEDURE pro_findById(IN eid INT, OUT vnaem VARCHAR(20))BEGIN

SELECT empName INTO vname FROM employee WHERE id =eid;END$--调用

CALL pro_findByID(1, @NAME);SELECT @NAME

7、删除存储过程

DROP PROCEDURE 存储过程名称

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值