案例所涉及到的表如下:
CREATE TABLE `t_goods` (
`g_id` varchar(20) NOT NULL COMMENT '商品编号',
`g_name` varchar(30) DEFAULT NULL COMMENT '商品名称',
`g_price` float DEFAULT NULL COMMENT '商品价格',
`g_discount` float DEFAULT NULL COMMENT '折扣价格',
`g_star` int(11) DEFAULT NULL COMMENT '顾客评分(1:一星2:二星依次类推)',
`g_author` varchar(10) DEFAULT NULL COMMENT '作者',
`g_press` varchar(50) DEFAULT NULL COMMENT '出版社',
`g_publish_time` varchar(12) DEFAULT NULL COMMENT '出版时间(格式2019-12-12)',
`g_img_path` varchar(100) DEFAULT NULL COMMENT '商品图片所在路径',
`g_desc` varchar(500) DEFAULT NULL COMMENT '内容概述',
`g_number` int(11) DEFAULT NULL COMMENT '商品的数量',
PRIMARY KEY (`g_id`)
) ENGINE=MyISAM DEFAULT CHARSET=gb2312;
部分参考数据如下:
一、MySQL存储过程的创建
建立个存储过程,将商品编号g_id=’ hadoop_001’这本书的价格加10元,并显示结果。实现过程如下:
DELIMITER//
CREATE PROCEDURE add_price()
BEGIN
UPDATE t_goods SET g_price = g_price 10 WHERE g_id='hadoop_001' ;
SELECT * FROM t_goods;
END;
//
CALL add_price()
二、MySQL存储过程的参数
分别建立个带参数in、out、inout的存储过程:
1、带in的参数
DELIMITER//
CREATE PROCEDURE demo_in(IN p_in INT)
BEGIN
SELECT p_in;
SET p_in=2;
SELECT p_in;
END;
//
SET @p_in=1
CALL demo_in(@p_in)
CALL demo_in(100)
2、带out参数
DELIMITER//
CREATE PROCEDURE demo_out(OUT p_out INT)
BEGIN
SELECT p_out;
SET p_out=2;
SELECT p_out;
END;
//
SET @p_out=1
CALL demo_out(@p_out) /*未被定义,返回为null */
SELECT @p_out; /*返回为2 */
3、带inout
DELIMITER//
CREATE PROCEDURE demo_inout(INOUT p_inout INT)
BEGIN
SELECT p_inout;
SET p_inout=2;
SELECT p_inout;
END;
//
DELIMITER
SET @p_inout=1
CALL demo_inout(@p_inout)
SELECT @p_inout;
三、MySQL存储过程的选择结构
使用选择结构判断如果商品编号是hadoop_001,则输出其商品名称。实现过程参考如下:
DELIMITER//
CREATE PROCEDURE goods_demo1()
BEGIN
DECLARE v1 VARCHAR(20);
DECLARE v2 VARCHAR(20);
SELECT g_id,g_name INTO v1,v2 FROM t_goods WHERE g_id='hadoop_001';
IF v1='hadoop_001' THEN
SELECT v2;
END IF;
END;
//
CALL goods_demo1()
四、MySQL存储过程的循环结构练习
使用循环结构实现1 2 3 … 100 = ? ,实现过程如下:
DELIMITER //
CREATE PROCEDURE while_demo()
BEGIN
DECLARE i INT;
DECLARE _sum INT;
SET i=0;
SET _sum=0;
WHILE i<=100 DO
SET _sum=_sum i;
SET i=i 1;
END WHILE;
SELECT _sum;
END ;
//
CALL while_demo()
结果为:
五、MySQL存储过程的CASE分支语句
建立个存储过程,参数是订单状态pay_status ,其值为整数类型,使用case语句判断 pay_status的值,然后输出相应的结果。规则如下:
(1)pay_status = 0 ,则输出“微信支付”
(2)pay_status = 1 ,则输出“支付宝支付”
(3)pay_status = 0 ,则输出“银行卡支付”
DELIMITER //
CREATE PROCEDURE case_demo (IN pay_status INT)
BEGIN
DECLARE i INT;
SET i=pay_status;
CASE i
WHEN 0 THEN
SELECT '微信支付';
WHEN 1 THEN
SELECT '支付宝支付';
ELSE
SELECT '银行卡支付';
END CASE;
END ;
//
CALL case_demo(1)
,