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.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示