1.存储过程:
题目:使用循环显示1-20之间的奇数
代码:
CREATE PROCEDURE SHOW()
BEGIN
DECLARE n INT;
SET n=1;
CREATE TEMPORARY TABLE temp_usp_00(name int );
WHILE n<=20 DO
IF n%2!=0 THEN
INSERT INTO temp_usp_00(name) VALUES(n);
END IF;
SET n=n+1;
END WHILE;
SELECT * FROM temp_usp_00;
DROP TABLE temp_usp_00;
END
2事务
题目:
数据库productorder。
需求说明:马云买了一部iphone7,使用事务处理。
需要完成的操作:
思路:
1.定义变量:t_error 让它自动捕获系统错误
DECLARE t_error INTEGER DEFAULT 0;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1;
2.获得iphone7手机的产品ID,(从product表中查询给变量赋值)
3.生成订单(insert order)。
4.并查询出生产订单的编号:SELECTLAST_INSERT_ID() into @orderNum;
5.判断t_error,如果等于1,回滚,其他,commit;
提示:使用存储过程并将手机品牌Sname、客户ID、购买数量number作为输入参数。
代码:
BEGIN
#Routine body goes here..
DECLARE pid1 INT;
DECLARE cid1 INT;
DECLARE num int;
DECLARE sname1 VARCHAR(20);
DECLARE date1 Date;
DECLARE t_error INT DEFAULT 0;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1;//第一步
START TRANSACTION;
set cid1=id;
SET pid1=1;
SET sname1=sname;
SET num=number;
//第二步,获得iphone7手机的产品ID
SELECT p.pid INTO pid1
FROM product p
WHERE p.pname=sname1;
SELECT CURDATE() into date1;
//第三步,生成订单,插入到订单表中
INSERT INTO ‘order’(pid,cid,ocount,oprice,odate) VALUES(pid1,cid1,num,5000,date1);
//第四步,查询生成的订单ID
SELECT o.oid
FROM ‘order’ o
where o.odate=date1;
//第五步,判断error
if(t_error=1) THEN
ROLLBACK;
ELSE
COMMIT;
end IF;
END