作为一个水平无法溢出的菜鸟,还是老老实实认真学习的好。在系统的学习Mysql存储过程之前,还需要部分的解释一下Mysql中的一些在存储过程中出现的关键字以及语法的使用。
decimal(2,1) 指定义的数值含有两位有效长度,其中包含一位小数。DECLARE(declare)在mysql中是声明一个变量的意思。DEFAULT 在sql中为列插入默认值。
例:
DECLARE val int DEFAULT 6; 声明一个变量val,其类型为int,自定义默认值为6。
in :给参数传入值,定义的参数就得到了值。out:模式定义的参数只能在过程体内部赋值,表示该参数可以将某
个值传递回调用他的过程(在存储过程内部,该参数初始值为 null,无论调用者是否给存储过程参数设置值) inout:
调用者还可以通过 inout 参数传递值给存储过程,也可以从存储过程内部传值给调用者。
例:
CREATE PROCEDURE test (in type INT);/*将调用方法时传入的参数赋值给type*/
CREATE PROCEDURE avgid(
OUT avgi DECIMAL(3,1) /*要输出的参数*/
)
BEGIN
SELECT AVG(id) INTO avgi FROM `user`; /*通过在过程内部将值赋予给参数*/
END;
CALL avgid(@avgi); /*调用该存储过程*/
SELECT @avgi; /*获取查询值*/
关于inout的使用:
CREATE
PROCEDURE
p3(INOUT age
INT
)
BEGIN
SET
age := age + 20;
END
set
@currage =18
call p3(@currage)/*存储过程在调用currage的时候,会将该值直接赋值到存储过程中并执行(所谓的内部传
值)*/
DORP PROCEDURE IFEXISTS procedureName;/*删除存储过程,删除后面无需调用括号*/
带参的存储过程:
1. create procedure procedureName(
2. out min decimal(8,2),
3. out avg decimal(8,2),
4. out max decimal(8,2)
5. )
6. BEGIN
7. select MIN(price) INTO min from order;
8. select AVG(price) into avg from order;
9. select MAX(price) into max from order;
END;1. -- 由于过程指定三个参数, 故调用必须要参数匹配
call procedureName(@min, @avg, @max);