mysql函数 游标_mysql存储过程、函数及游标

存储过程是一个程序化函数,由sql语句及相应的控制结构组成。

1 DELIMITER $$2

3 CREATE PROCEDURE Total_Orders(OUT Total FLOAT)4 BEGIN

5 SELECT SUM(Amount) INTO Total FROMOrders;6 END

7 $$8

9 DELIMITER ;

DELIMITER #将语句结束符;改为$,将存储过程看成一个整体,执行完存储过程后需要将其改回结束符 ;

使用存储过程

CALL Total_Orders(@t);         #将存储过程的结果放在一个用户变量@t里面

SELECT @t;

函数

1 DELIMITER $$2

3 CREATE FUNCTION Add_Tax(Price FLOAT)4 RETURNS FLOAT

5 DETERMINISTIC6 BEGIN

7 DECLARE Tax FLOAT DEFAUT 0.10;8 RETURN Price*(1+Tax);9 END

10 $$11

12 DELIMITER ;

存储函数参数中没有IN或OUT ,参数都是输入值

returns float 表示函数返回一个float类型的数值

DETERMINISTIC表示在给定相同参数情况下,一个确定性函数可以返回相同的值,该位置可以有别的关键字,例如NO SQL 表示程序体没有sql语句

使用return返回一个值

##查看定义

1 SHOW CREATE PROCEDURETotal_Orders;2 SHOW CREATE FUNCTION Add_Tax;

##删除存储过程或者函数

1 DROP PROCEDURETotal_Orders;2 DROP FUNCTION Add_Tax;

##调用函数

SELECT Add_Tax(@a);

##游标的使用

1 #Procedure to find the orderid withthe largest amount2 #could be done with max ,but just to illustrate stored procedure

3 #principles4

5 DELIMITER $$6

7 CREATE PROCEDURE Largest_Order(OUT Largest_ID INT)8 BEGIN

9 DECLARE This_ID INT;10 DECLARE This_Amout FLOAT;11 DECLARE L_Amout FLOAT DEFAULT 0.0;12 DECLARE L_ID INT;13

14 DECLARE Done INT DEFAULT 0;15 DECLARE C1 CURSOR FOR SELECT OrderID,Amount FROMOrders;16 DECLARE CONTINUE HANDLER FOR NOT FOUND SET Done=1;17

18 OPENC1;19 REPEAT20 FETCH C1 INTOThis_ID,This_Amout;21 IF NOT DONE THEN

22 IF This_Amount > L_Amount THEN

23 SET L_Amount=This_Amout;24 SET L_ID =This_ID;25 END IF;26 END IF;27 UNTIL Done ENDREPEAT;28 CLOSEC1;29

30 SET Largest_ID =L_ID;31

32 END

33 $$34

35 DELIMITER ;

使用过程

①在存储过程中声明游标 DECLARE C1 CURSOR FOR SELECT OrderID,Amount FROM Orders;

②声明处理程序 DECLARE CONTINUE HANDLER FOR NOT FOUND SET Done = 1;

③打开游标OPEN C1;

④获取每行数据,

FETCH C1 INTOThis_ID,This_Amout;

使用repeat。。。until done end repeat;来遍历。或者使用while  condition DO   .....end while;

LOOP ....END LOOP;使用LEAVE语句退出

⑤关闭游标CLOSE C1;

⑥返回输出值。

CALL Largest_Order(@a);

SELECT @a;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值