前言
自定义存储过程,由用户创建并能完成某一特定功能的存储过程,存储过程既可以有参数又有返回值,但是它与函数不同,存储过程的返回值只是指明执行是否成功。
一、存储过程的格式
-
CREATE PROCEDURE 过程名([过程参数 […]])
[特性 …] 过程体例如:
mysql> delimiter //
mysql> create procedure proc1(out s int)
-> begin
->
-> select count (*)into s from emp;
-> end;
-> //
-> delimiter;
<hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">
二、delimiter关键字
- delimiter是分隔符的意思。
- 如果我们没有声明分隔符,编译器会把存储过程当成SQL语句进行处理,那么存储过程的编译过程会报错,所以事先要使用delimiter关键字声明当前分隔符(delimiter //),这样MySQL才会将“;”当做存储过程中的代码,不会执行这些代码。但记得用完之后要把分隔符还原(delimiter;)。
三、存储过程的参数
- MySQL存储过程的参数用在存储过程的定义,共有三种参数类型
IN,OUT,INOUT,
- 形式如:CREATE PROCEDURE[[IN |OUT |INOUT]参数名 数据类型])
(1)IN输入参数:
表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回。如果没有指定参数,IN参数为默认值
-
创建存储过程:
-
调用存储过程:
-
结果1:10 结果2:1000 结果3:10
(2)OUT输出参数:
该值可在存储过程内部被改变,并可返回
-
创建存储过程:
-
调用存储过程:
-
结果:14 表示emp表所有记录的条数是14条
(3)INOUT输入输出参数:调用时指定,并且可被改变和返回
-
创建存储过程:
-
调用存储过程:
-
结果1:111 结果2:666 结果3: 666
四 、存储过程的变量
① 变量定义
- DECLARE variable_name [variable_name…] datatype [DEFAULT value];
其中,datatype为MySQL的数据类型,包括:int,float,date,datetime,varchar(length)。
② 用户变量
- 用户变量名一般以@开头;
(1)在Mysql客户端使用用户变量
-
方式1:
-
方式2:
-
查询结果:
注:声明用户变量并且赋值的时候可以使用表达式:
(2)在存储过程中使用用户变量 -
创建存储过程:
-
调用存储过程:
-
结果:
(3)在存储过程间传递全局范围的用户变量 -
创建存储过程:
-
调用存储过程:
-
结果: