mysql的储存过程

来源:互联网 发布:adobe 2017mac百度云 编辑:程序博客网 时间:2024/05/23 19:16

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的函数


1 0
原创粉丝点击