MySQL存储过程

注:未经本文作者同意,严禁转载,本文仅提供作者查阅使用

创建存储过程的基本格式

-- 格式
DELIMITER $$
CREATE PROCEDURE <proc_name>([IN/OUT arge])
BEGIN
 -- SQL
END $$

例子1:

-- 存储过程:就是将能够完成特定功能的SQL指令进行封装
-- 创建一个存储过程实现加法运算:存储过程,是有输入参数 和 输出参数的
-- 什么是输入和输出参数,输入参数类似于Java中的入参和入参的类型;输出参数类似于Java中的返回值
DELIMITER $$
CREATE PROCEDURE procedure_test1(IN a INT,IN b INT,OUT c INT)
BEGIN
  SET c = a+b;
END $$

调用存储过程

-- 调用存储过程
-- CALL 存储过程名称(3,2,变量)

-- 定义变量@m
SET @m = 0;
-- 调用存储过程,将3传递给a,将2传递给b,将@m传递给c
CALL procedure_test1(3,2,@m)

显示变量值

-- 显示变量值,dual这张表是系统自带的
SELECT @m FROM dual

例子2:

细节注意:return 返回在自定义函数中返回,存储过程中返回需要用到 select 关键字,否则调用存储过程时会是空。还有就是这里的

x 和 y 不要加上 `` 不然调用存储过程时,查的时候还是 null 值

-- 创建一个存储过程:计算 输入参数的平方与输入参数/2 之和
DELIMITER $$
CREATE PROCEDURE procedure_test2(IN a INT,OUT r INT)
BEGIN
 -- 此处的变量是存储过程使用的局部变量,定义关键字 declare
 -- declare <attr_name> <type> [default value];
 -- declare 变量名称 变量类型 默认值设置;
 DECLARE x INT DEFAULT 0;
 DECLARE y INT DEFAULT 0;
 DECLARE r INT DEFAULT 0;
 SET x = a*a;
 SET y = a/2;
 SET r = x+y;
 SELECT r;
END $$

-- 定义一个用户变量,细节注意:变量要以@开头,定义的关键字是set关键字
-- 什么是用户变量:用户变量相当于全局变量,可以在多个 SQL 存储过程中共享
-- 在开发中尽量少使用用户变量。原因:用户变量过多,会容易导致程序不容易理解,维护时比较困难
SET @n=1
CALL procedure_test2(6,@n)
SELECT @n FROM DUAL 

-- 删除存储过程
DROP PROCEDURE procedure_test2

在这里插入图片描述

加了 select 返回的

在这里插入图片描述

例子3:

-- 查询存储过程:查询员工的数量并返回
DELIMITER $$
CREATE PROCEDURE procedure_test3(OUT e INT)
BEGIN
  -- into e意思:将查询出的结果值赋值给 e 并且返回出去 
  SELECT COUNT(id) INTO e FROM employees;
END $$

SET @i=0
CALL procedure_test3(@i)
SELECT @i FROM DUAL

SELECT COUNT(id) FROM employees

DROP PROCEDURE procedure_test3

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2qbwn9HG-1640167827732)(MySQL%E5%AD%98%E5%82%A8%E8%BF%87%E7%A8%8B.assets/image-20211222125011968.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NzbW2l9g-1640167827733)(MySQL%E5%AD%98%E5%82%A8%E8%BF%87%E7%A8%8B.assets/image-20211222125028103.png)]

细节注意:但是你不能写成以下这样,这样写是会报错的

DELIMITER $$
CREATE PROCEDURE procedure_test4(OUT e INT)
BEGIN
  SET e = SELECT COUNT(id) FROM employees;
  SELECT e;
END $$

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ppb6e9Sf-1640167827736)(MySQL%E5%AD%98%E5%82%A8%E8%BF%87%E7%A8%8B.assets/image-20211222125233867.png)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值