存储过程我也没怎么用过,很浅显,大多都是直接调用,类似于一个封装好的接口一样,传入指定参数(或者不传),然后执行约定好的逻辑,执行;




mysql存储过程_python


image.png


以这个为例:findbyname

DELIMITER //
USE assets //
DROP PROCEDURE IF EXISTS `findbyname`//
CREATE PROCEDURE findbyname(IN na VARCHAR(55)CHARACTER SET utf8)
BEGIN
SELECT device_code FROM ass_device WHERE device_name = na OR device_id = na;
END //
DELIMITER ;

DELIMITER 声明/定义
DELIMITER // 重新定义 将默认的; 改为// // 表示一句话的结束
USE assets // 用assets这个库 // 结束
DROP PROCEDURE IF EXISTS findbyname// 如果存在findbyname同名的存储过程删除 // 结束
CREATE PROCEDURE findbyname(IN na VARCHAR(55) CHARACTER SET utf8)
创建一个名字为findbyname 的存储过程 IN 表示入参 na 参数名
VARCHAR(55) CHARACTER SET utf8 入参大小 以及入参编码格式 不设置格式,中文会乱码查询不到
BEGIN 开始
END // 结束语 表示存储过程结束 // 结束
DELIMITER ; 恢复mysql中存储过程的默认结束 ; 为什么一定要这样呢?开始将默认值 ; 改为 // 最后恢复为 ; 咋回事呢????????

因为:
mysql 语句中 也是以分号 ; 结尾的:SELECT device_code FROM ass_device WHERE device_name = na OR device_id = na ; 不更改为 // 会导致存储过程异常,所以必须改,否则编译不过去

直接运行 上述语句就可以创建成功一个名字为findbyname 的存储过程
这个存储过程的作用很简单,就是传入一个参数,当 device_name = na OR device_id = na 和他相等的查询条件.
下面开始尝试存储过程的调用:
===============================================================================
CALL findbyname('028534fd70fa3bbd20f99850db909566');
CALL 关键字 存储过程的调用



mysql存储过程_linux_02


image.png


SET @na = '2' ; 设置入参为'2'
SELECT @na; 查询现在入参的值na



mysql存储过程_mysql_03


image.png


CALL findbyname(@na); 根据当前入参查询结果



mysql存储过程_java_04


image.png