1.概念
网上有人总结为:该储存过程就像Java的函数一般,用于添加mysql功能的!
2.接下去来一个比较简单的储存功能.
DELIMITER $
CREATE PROCEDURE pro()
BEGIN
SELECT * FROM cba;
END $
CALL pro();
delimeter是分隔符 开始的意思
CREATE PROCEDURE pro() 创建新的一个储存过程,pro是储存过程的名字
BEGIN 存储过程的功能开始
SELECT * FROM cba; 功能语句
END $ 结束关键词
SELECT * FROM cba;
这个红色笔部分是这个储存过程的功能!查询cba表的全部信息
CALL pro(); 这句话的意思是调用名为pro()储存过程
结果如下图
其实把储存过程理解为java方法确实比较好理解,因为储存过程也有参数的,它可以装三种类型的参数
in :表示输入参数,可以携带数据带储存过程中
out :表示输出参数,可以从存储过程中返回结果
inout:表示输入输出参数,既可以输入功能,也可以输出功能.
-- + 空格 ;代表mysql的注释
使用 @会话变量加输出式的储存过程
以下是 用会话变量 加上 储存过程输出功能的 代码,out 将值输出到sam3 然后采用会话变量来接值 最后查询会话变量就可得out参数
DELIMITER $
CREATE PROCEDURE me(OUT sam3 VARCHAR(20)) -- out代表输出,sam3代表的是局部变量
BEGIN
SET sam3='ok';
END$
call me(@ni);-- 在调用储存过程中设置了会话变量
select @ni;
便可以看到,储存过程当中,输入值输出给了会话变量
最后我使用输出式的存储过程来做一个数据库小项目------> 1 代表星期一 2 代表星期二 3 代表星期三 其他代表输入错误
DELIMITER $
CREATE PROCEDURE ni(IN num INT,OUT xingqi VARCHAR(20))
BEGIN
IF num=1 THEN
SET xingqi='星期一';
ELSEIF num=2 THEN
SET xingqi='星期二';
ELSEIF num=3 THEN
SET xingqi='星期三';
ELSE
SET xingqi='错误输出';
END IF;
END $
CALL ni(2,@ni)
SELECT @ni;
再来一个关于1加到一百的小练习
-- 从1加到100的总和,算法
DELIMITER $
CREATE PROCEDURE sum_test1(IN num INT,OUT result INT)
BEGIN
DECLARE i INT DEFAULT 1;
DECLARE content INT DEFAULT 0;
WHILE i<num DO
SET content=content+i;
SET i=i+1;
END WHILE;
SET result = content;
END $
CALL sum_test1(100,@content)
SELECT @content
总结 储存过程 有点像 java的函数