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 2023-01-26 15:05  博览天下with天涯海角  阅读(96)  评论(0)    收藏  举报