mysql存储过程案例
直接po代码和案例
#mysql存储过程案例
#一、创建存储过程实现传入用户名和密码,插入到admin表中
/*
将$美元符作为结束和提交的标志符,只有遇到$美元符号才会提交给mysql数
据库执行,遇到;分号是不会提交给mysql数据库执行的
*/
DELIMITER $
CREATE PROCEDURE test_pro1(IN username VARCHAR(30), IN `password` VARCHAR(30))
BEGIN
INSERT INTO admin(admin.username,admin.`password`)
VALUES (username, `password`);
END;$
#带了分号;(语法OK)
CALL test_pro1('双儿', '666888');$
#没带分号;(语法OK)
CALL test_pro1('建宁公主', '666888')$
#二、创建存储过程实现传入女神编号,返回女神名称和女神电话
DELIMITER $
CREATE PROCEDURE test_pro2(IN id INT, OUT `name` VARCHAR(30), OUT phone VARCHAR(30))
BEGIN
SELECT beauty.`name`, beauty.phone INTO `name`, phone FROM beauty
WHERE beauty.id = id;
END;$
#调用存储过程
SET @name = '';$
SET @phone = '';$
CALL test_pro2(18, @name, @phone);$
SELECT @name AS 女神名, @phone AS 女神号码;$
#调用存储过程
CALL test_pro2(15, @n, @p);$
SELECT @n AS 女神名, @p AS 女神号码;$
#三、创建存储存储过程或函数实现传入两个女神生日,返回大小
DELIMITER $
CREATE PROCEDURE test_pro3(IN birth1 DATETIME, IN birth2 DATETIME, OUT result INT)
BEGIN
SELECT DATEDIFF(birth1, birth2) INTO result;
END$
#
SET @result = 666; #注意:用户变量要求声明时必须初始化
CALL test_pro3('2019-01-12', '2019-01-15', @result)$
SELECT @result AS 结果$
CALL test_pro3('2019-01-22', '2019-01-21', @result)$
SELECT @result AS 结果$
CALL test_pro3('2019-01-18', '2019-01-18', @result)$
SELECT @result AS 结果$
CALL test_pro3('2019-01-18', NOW(), @res)$
SELECT @res AS 结果$
#四、创建存储过程或函数实现传入一个日期,格式化成xx年xx月xx日并返回
DELIMITER $
CREATE PROCEDURE test_pro4(IN myDate DATETIME, OUT strDate VARCHAR(60))
BEGIN
SELECT DATE_FORMAT(myDate, '%Y年%m月%d日') INTO strDate;
END$
#调用
SET @myStrDate = ''$
CALL test_pro4(NOW(), @myStrDate)$
SELECT @myStrDate$
#五、创建存储过程或函数实现传入女神名称,返回:女神 and 男神 格式的字符串
/*
如 传入 :小昭
返回: 小昭 AND 张无忌
*/
DELIMITER $
CREATE PROCEDURE test_pro5(IN `name` VARCHAR(30), OUT result VARCHAR(50))
BEGIN
SELECT CONCAT(`name`, ' and ', IFNULL(bo.boyName,'null')) INTO result FROM beauty AS b
LEFT OUTER JOIN boys AS bo
ON b.boyfriend_id = bo.id WHERE b.name = `name`;
END$
#
#调用存储过程
SET @result = ''$ #注意:用户变量要求声明时必须初始化
CALL test_pro5('范冰冰', @result)$
SELECT @result AS 结果$
#
CALL test_pro5('小昭', @res)$
SELECT @res AS 结果$
#
CALL test_pro5('黄圣依', @res)$
SELECT @res AS 结果$
#六、创建存储过程或函数,根据传入的条目数和起始索引,查询beauty表的记录
DELIMITER $
CREATE PROCEDURE test_pro6(IN startIndex INT, IN size INT)
BEGIN
SELECT * FROM beauty LIMIT startIndex, size;
END;$
#调用存储过程
CALL test_pro6(0, 10)$
CALL test_pro6(5, 8)$