-- 查看 mysql 版本8.0.18 以下内容Navicat Premium 中可正常执行
-- select version();
DROP PROCEDURE IF EXISTS `pro_Test`;
DELIMITER $ -- 定义结束符号 也可以是 两个分号 ;; 后面的结束符号 要写这个
CREATE DEFINER=`root`@`localhost` PROCEDURE `pro_Test`(IN `UserID` varchar(200),IN `Name` varchar(100))
begin
-- 多条件查询返回结果值 MYSQL 中不能用+号作为连接符号
-- 局部变量赋值时 如果用select @xx =
-- PREPARE stmt FROM @sql; 要用 会话变量 不能用 局部变量
-- 局部作用域
-- 使用declare关键字声明(在结构体内:函数/存储过程/触发器),而且只能在结构体内部使用。
-- declare关键字声明的变量没有任何符号修饰,就是普通字符串,如果在外部能够访问该变量,系统会自动认为是字段。
-- 会话作用域
-- 用户定义的:使用@符号定义的变量,使用set关键字。 @开头不用定义变量类型,默认全部都支持 相当于java 中的 Object类型
-- 会话作用域:在当前用户当次连接有效,只要在本连接之中,任何地方都可以使用(可以在结构内部,也可以跨库)
-- 会话变量可以在函数内部使用
DECLARE v_id varchar(100) DEFAULT '';
DECLARE v_sql VARCHAR(4000);
SET v_sql ='select * from sys_user where 1=1 ';
if UserID<>'' then
set v_sql=CONCAT(v_sql,' and id = ',"'",UserID,"'");
end if;
if Name<>'' then
SET v_sql =CONCAT(v_sql,' and username like ',"'%",Name,"%'");
end if;
set @sql = v_sql;
-- select CONCAT('sql语句为:',@sql) ;
PREPARE stmt FROM @sql;
EXECUTE stmt;
deallocate prepare stmt; -- 这里要看具体情况否对外部调用 有影响 如果有影响要 删除这个
END
$ -- 结束符号
--调用---
CALL pro_Test('','admin');
mysql 存储过程学习
最新推荐文章于 2024-09-09 08:42:59 发布