Loading

mysql存储过程

定义

为了完成特定功能的 sql语句集。经编译创建并保存在数据库的数据字典中。

特点

  • 没有返回值
  • 没有sql语句调用,只能call调用
  • 不返回结果集

语法

声明语句结束符,可自定义

DELIMITER // or
DELIMITER $$

创建存储过程,存储函数

create procedure 存储过程名(参数)

创建存储过程体

create function 存储过程名(参数)

存储过程开始和结束

BEGIN....END

  • 参数
    参数类型: IN,OUT,INOUT
    IN 输入参数: 调用时指定,存储过程修改该值不能返回
    OUT 输出参数: 不接收传入值,可在存储过程被改变并可返回
    INOUT 输入输出参数: 调用时指定,可改变可返回

注意: 参数名不能是列名,否则会被当成列名处理

声明变量

局部变量需要放在存储过程体的开始;
DECLARE variable_name datatype [DEFAULT value]
变量作用域: 仅存在begin...end这段内。

变量赋值

SET 变量名 = 表达式值

注释

用户变量

使用set 或 select 直接赋值,变量名以@开头
变量作用域: 整个会话,全局变量。
set @p_01 = 1
select name,bid into @a1,@a2 from bank limit 1; 变量名和字段名不能一致。

调用存储过程

call 存储过程名[(传参)]

查询存储过程

select name from mysql.proc where db='数据库名'

or

select routine_name from information_schema where routine_schema='数据库名'

or
show procedure status where db='数据库名'

修改存储过程

alter procedure

删除存储过程

drop procedure

栗子

mysql> delimiter $$
mysql> create procedure inout_param(inout p_inout int)
    ->   begin
    ->     select p_inout;
    ->     set p_inout=2;
    ->     select p_inout;
    ->   end
    -> $$
mysql> delimiter ;

参考:
mysql 存储过程|菜鸟教程
mysql 存储过程之变量的定义

posted @ 2021-02-23 18:03  Tester-Dolores  阅读(79)  评论(0编辑  收藏  举报