mysql函数、存储过程、触发器、游标.doc
文本预览下载声明
mysql函数、存储过程、触发器、游标
mysql函数、存储过程、触发器、游标2010-05-21 12:021.procedure
(1)存储过程游标
mysql DELIMITER//
mysql DROP PROCEDURE IF EXISTSoh_qty//
/*如果存在同名存储过程则删除*/
mysql CREATE PROCEDURE oh_qty()/*创建存储过程*/
-BEGIN
-DECLARE plant CHAR(4);
-DECLARE loc CHAR(4);
-DECLARE part CHAR(15);
-DECLARE onhand DECIMAL(15,4);
-DECLARE finished INTEGER DEFAULT 0;
-DECLARE oh_cur CURSOR FOR
-SELECT inv_plant,inv_loc,inv_part,inv_oh_qty FROM inv;
-/*声明游标*/
-DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished=1;
-/*如果没有找到数据则finished=1*/
-OPEN oh_cur;
-/*打开游标*/
-calcloop:
-LOOP
-FETCH oh_cur INTO plant,loc,part,onhand;
-/*fetch命令获取游标结果集并保存到变量中*/
-IF finished=1 THEN
-LEAVE calcloop;
-END IF;
-/*执行leave命令立即退出循环或BEGIN/END块.*/
-IF plant=SJ01THEN
-ITERATE calcloop;
-END IF;
-/*执行iterate语句将使嵌入该语句的LOOP,REPEAT,或WHILE循环返回到顶部,并再次执行.此处将去除plant=SJ01的数据.*/
-UPDATE inv SET inv_oh_qty=inv_oh_qty*10
-WHERE inv_plant=plant AND inv_loc=loc AND inv_part=part;
-/*此处对数据集进行处理*/
-END LOOP calcloop;/*loop循环结束*/
-CLOSE oh_cur;/*关闭游标*/
-END///*存储过程结束*/
Query OK,0 rows affected(0.00 sec)
mysql DELIMITER;
mysql CALL oh_qty();/*执行存储过程*/
Query OK,1 row affected(0.02 sec)
(2)Procedure:
mysql DELIMITER//
mysql CREATE PROCEDURE get_inventory(OUT inv INT)
-SELECT 45 INTO inv;
-//
mysql CALL get_inventory(@inv);
mysql SELECT@inv;
/*如果希望在存储过程外使用变量,需要将其作为OUT变量传递*/
返回结果:45
(3)IF语句
IF years_employed 5THEN SET bonus=total*.05;
ELSEIF years_employed=5 and years_employed 10 THEN SET bonus=total*.06;
ELSEIF years_employed=10 THEN SET bonus=total*.07;
END IF
(4)CASE语句
CASE WHEN state=ALTHEN SET tax_rate=.04;
WHEN state=AKTHEN SET tax_rate=.00;
END CASE;
或:
CASE state WHENALTHEN SET tax_rate=.04;
WHENAKTHEN SET tax_rate=.00;
END CASE;
(5)REPEAT语句
CREATE PROCEDURE test_date(rows INT)
BEGIN DECLARE val1 FLOAT;
DECLARE val2 FLOAT;
REPEAT SELECT RAND()INTO val1;
SELECT RAND()INTO val2;
INSERT INTO analysis VALUES(NULL,val1,val2);
SET rows=rows-1;
UNTIL rows=0 END REPEAT;
END//
/*此存储过程将随机产生五条记录插入到analysis表中*/
(6)WHILE语句
CREATE PROCEDURE test_dat
显示全部