随笔 - 21  文章 - 0  评论 - 0  阅读 - 6131

mysql存储过程和游标

创建存储过程

存储过程和定义函数相似,使用CREATE PROCEDURE 存储名(),BEGIN 和 END之间为“函数体”。

复制代码
CREATE TABLE Blog (
    author VARCHAR(25),
    blog TEXT,
    createat DATETIME,
    updateat TIMESTAMP
    )
-- 创建存储过程 CREATE PROCEDURE Blog_author() BEGIN SELECT COUNT(*) AS number FROM Blog; END

复制代码

注意:默认的mysql语句分隔符为;如果命令行要解释存储过程自身的;字符,则它们最终不会成为存储过程的成分,这会使得存储过程中的sql语句出现错误。上面的创建存储过程语句可能会出现错误,可以使用下面的编写方式:

DELIMITER //
CREATE PROCEDURE Blog_author()
BEGIN
    SELECT COUNT(*) AS number FROM Blog;
END //
DELIMITER;

DELIMITER //告诉命令行使用//作为新的语句结束符,可以看到标志存储过程结束的END定义为END //。这样存储过程体内的;仍然保持不动,并且正确地传递给数据库引擎。最后使用DELIMITER ;来恢复分隔符为;

带参数的存储过程

使用OUT定义传出参数,使用IN定义传入参数。使用INTO将数据保存到参数中。

DELIMITER //
CREATE PROCEDURE Blog_blog(OUT content TEXT, IN `name` VARCHAR(25))
BEGIN
    SELECT blog INTO content FROM Blog WHERE author = `name`;
END //
DELIMITER;

调用存储过程

使用CALL 存储名来调用存储过程,其中传入的参数变量使用@开头,后面为变量名。数据会右存储过程体内的INTO语句保存到变量中,然后使用select @变量名查看变量内容。

CALL Blog_blog(@content, '大帝石3');
SELECT @content;

存储过程体内的一些使用

在存储过程体内定义局部变量

使用DECLARE 来定义局部变量。

 

 删除存储过程

使用DROP PROCEDURE 存储名来删除定义的存储过程。如果不存在,则DROP PROCEDURE会产生一个错误。因此可以使用 DROP PROCEDURE IF EXISTS.

posted on   博览天下with天涯海角  阅读(61)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示