二维码
微世推网

扫一扫关注

当前位置: 首页 » 企业商讯 » 汽车行业 » 正文

MYSQL存储过程即常用逻辑知识点总结

放大字体  缩小字体 发布日期:2022-06-26 15:07:07    作者:田子墨    浏览次数:119
导读

Mysql存储过程1.创建存储过程语法(格式)DELIMITER $CREATE PROCEDURE 存储过程名A(IN 传入参数名a INT,IN 传入参数名b VARCHAr(20),OUT 返回参数名c INT)BEGIN  内容..........END $解析:IN 代表传入得参数,定义传入参数名,并且后面跟上传入参数类型(INT,VARCHAR,DOUBLE,........)OUT 代表存储过程执行完

Mysql存储过程

1.创建存储过程语法(格式)

DELIMITER $CREATE PROCEDURE 存储过程名A(IN 传入参数名a INT,IN 传入参数名b VARCHAr(20),OUT 返回参数名c INT)BEGIN  内容..........END $

解析:

  • IN 代表传入得参数,定义传入参数名,并且后面跟上传入参数类型(INT,VARCHAR,DOUBLE,........)
  • OUT 代表存储过程执行完返回得数据,定义参数名,并且后面跟上参数类型(INT,VARCHAR,DOUBLE,........)
  • INOUT 代表既可以传入也可以返回 ,定义参数名,并且后面跟上参数类型(INT,VARCHAR,DOUBLE,........)

    2.存储过程内具体语法与逻辑

    A.定义变量语法:

    DECLARE 变量名a 参数类型(INT,VARCHAr(20),BOOLEAN,........) [DEFAULT NULL];

    注:可以在参数类型后面加 DEFAULT NULL; 来设置初始值。

    B.变量赋值:

    方式1(直接对变量进行赋值):

    SET 定义得变量a = NEW();

    方式2(sql查询得结果直接赋值给变量):

    SELECt `student`.age INTO 定义得变量a FROM `student` WHERe...........

    方式3(sql查询得结果直接赋值给多个变量):

    SELECt `student`.name AS 定义得变量a,`student`.age AS 定义得变量b INTO 定义得变量a,定义得变量b FROM `student` ...............

    c.逻辑判断:

    #IF判断:    IF 条件语句(3>5) THEN  条件为TRUE时执行.........;   END IF;  #IF ELSE判断:   IF 条件(a>0) THEN    条件为(a>0)时执行........;    ELSE IF 条件(a<0) THEN    条件为(a<0)时执行.......;    ELSE         其它执行.......;  END IF;

    D.游标,(LOOP)循环:

    #例.单游标循环:create procedure my_procedure() -- 创建存储过程begin -- 开始存储过程declare my_id varchar(32); -- 自定义变量1declare my_name varchar(50); -- 自定义变量2DECLARE done INT DEFAULT FALSE; -- 自定义控制游标循环变量,默认falseDECLARE cur CURSOR FOR ( SELECt id, name FROM t_people );-- 定义游标并输入结果集DECLARE ConTINUE HANDLER FOR NOT FOUND SET done = TRUE; -- 绑定控制变量到游标,游标循环结束自动转trueOPEN cur; -- 打开游标 posLoop: LOOP -- 开始循环体,myLoop为自定义循环名,结束循环时用到 FETCH cur into my_id, my_name;-- 将游标当前读取行得数据顺序赋予自定义变量12    IF done THEN - - 判断是否继续循环      LEAVE posLoop; -- 结束循环    END IF; -- 自己要做得事情,在 sql 中直接使用自定义变量即可 UPDATe t_user SET c_name = my_name WHERe id = my_id and rtrim(ltrim(c_name)) = ''; -- 左右去空格 COMMIT; -- 提交事务 END LOOP posLoop; -- 结束自定义循环体 CLOSE cur; -- 关闭游标END; -- 结束存储过程

    #例.多游标循环:create procedure my_procedure() -- 创建存储过程begin -- 开始存储过程declare my_id varchar(32); -- 自定义变量1declare my_name varchar(50); -- 自定义变量2DECLARE done INT DEFAULT FALSE; -- 自定义控制游标循环变量,默认falseDECLARE cur_1 CURSOR FOR ( SELECT id, name FROM t_people ); -- 定义游标并输入结果集DECLARE cur_2 CURSOR FOR ( SELECt id_2,name_2 FROM t_people_2); --定义游标并输入结果集DECLARE ConTINUE HANDLER FOR NOT FOUND SET done = TRUE; -- 绑定控制变量到游标,游标循环结束自动转trueOPEN cur_1; -- 打开游标 posLoop: LOOP -- 开始循环体,myLoop为自定义循环名,结束循环时用到 FETCH cur_1 into my_id, my_name; -- 将游标当前读取行得数据顺序赋予自定义变量12    IF done THEN -- 判断是否继续循环      LEAVE posLoop; -- 结束循环    END IF; -- 自己要做得事情,在 sql 中直接使用自定义变量即可 UPDATE ..........;  --自己要做得具体操作 END LOOP posLoop; -- 结束自定义循环体 CLOSE cur_1; -- 关闭游标  SET done = FALSE;  -- 因为当第壹个游标遍历完后其值被handler设置为TRUE了,如果不用set把它设置为 FALSE ,那么第二个游标就不会遍历了。(蕞好是在每个打开游标得操作前都用该语句,以确保游标能真正遍历)OPEN cur_2; -- 打开游标 posLoop_2: LOOP -- 开始循环体,myLoop为自定义循环名,结束循环时用到 FETCH cur_2 into my_id, my_name; -- 将游标当前读取行得数据顺序赋予自定义变量12    IF done THEN -- 判断是否继续循环      LEAVE posLoop_2; -- 结束循环    END IF; -- 自己要做得事情,在 sql 中直接使用自定义变量即可 INSERT ..........;   --自己要做得具体操作 END LOOP posLoop_2; -- 结束自定义循环体 CLOSE cur_2; -- 关闭游标END; -- 结束存储过程

    3.存储过程得调用

    #调用没有返回值得存储过程CALL 存储过程名(参数.....);#调用有返回值得存储过程(获得返回值)CALL 存储过程名(等aaa);SELECT 等aaa;

    4.删除存储过程

    DROP PROCEDURE 存储过程名;

    5.注意事项

    存储过程中得分号(;)很重要,尽量不要省略。

  •  
    (文/田子墨)
    打赏
    免责声明
    • 
    本文为田子墨原创作品•作者: 田子墨。欢迎转载,转载请注明原文出处:http://www.udxd.com/qysx/show-127263.html 。本文仅代表作者个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,作者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们邮件:weilaitui@qq.com。
     

    Copyright©2015-2023 粤公网安备 44030702000869号

    粤ICP备16078936号

    微信

    关注
    微信

    微信二维码

    WAP二维码

    客服

    联系
    客服

    联系客服:

    24在线QQ: 770665880

    客服电话: 020-82301567

    E_mail邮箱: weilaitui@qq.com

    微信公众号: weishitui

    韩瑞 小英 张泽

    工作时间:

    周一至周五: 08:00 - 24:00

    反馈

    用户
    反馈