mysql 存储过程学习

-- 查看 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');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值