2018/08/30--mysql数据库

SHOW PROCEDURE STATUS;

SHOW PROCEDURE STATUS LIKE 'ordertotal';

DELIMITER ;
CREATE PROCEDURE productpricing(OUT pl DECIMAL(8,2),OUT ph DECIMAL(8,2),OUT pa DECIMAL(8,2) )
BEGIN
    SELECT Min(prod_price) FROM products INTO pl;
    SELECT Max(prod_price) FROM products INTO ph ;
    SELECT Avg(prod_price) FROM products INTO pa ;
END//
DELIMITER ;

CALL productpricing(@a,@b,@c);

SELECT @a,@b,@c;

CREATE PROCEDURE ordertotal(
IN onumber int,
OUT ototal DECIMAL(8,2))
BEGIN 
    SELECT Sum(item_price*quantity) FROM orderitems 
    WHERE order_num=onumber
    INTO ototal;
END//
DELIMITER ;

CALL ordertotal(20005,@total);

SELECT @total;

智能存储:

CREATE PROCEDURE ordertotal(
IN onumber INT,
IN taxable BOOLEAN,
OUT ototal DECIMAL(8,2)) COMMENT 'obtain order total,optionally adding tax.'
BEGIN 
 DECLARE total DECIMAL(8,2);
 DECLARE taxrate INT DEFAULT 6;
 SELECT Sum(item_price*quantity) FROM orderitems
 WHERE order_num=onumber
 INTO total;
 IF taxable THEN
 SELECT total+total*taxrate/100 INTO total;
 END IF;
 SELECT total INTO ototal;
END//

DELIMITER ;

SHOW PROCEDURE STATUS;

SHOW PROCEDURE STATUS LIKE 'ordertotal';

CALL ordertotal(20005,0,@total1);

CALL ordertotal(20005,10,@total2);

SELECT @total1,@total2;

mysql游标只能应用于存储过程和函数。

DECLARE的次序:必须先局部变量,再游标,最后句柄

CREATE PROCEDURE processorders()
BEGIN
 DECLARE ordernumbers CURSOR 
 FOR 
 SELECT order_num FROM orders;
 OPEN ordernumbers;
 CLOSE ordernumbers;
END//

CREATE PROCEDURE processorders()
BEGIN 
 DECLARE o INT;
 DECLARE ordernumbers CURSOR
 FOR
 SELECT order_num FROM orders;
 OPEN ordernumbers;
 FETCH ordernumbers INTO o;
 CLOSE ordernumbers;
END//

CREATE PROCEDURE processorders()
BEGIN 
 DECLARE done BOOLEAN DEFAULT 0;
 DECLARE o INT;
 DECLARE ordernumbers CURSOR
 FOR
 SELECT order_num FROM orders;
 DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1;
 OPEN ordernumbers;
 REPEAT 
 FETCH ordernumbers INTO o;
 UNTIL done END REPEAT;
 CLOSE ordernumbers;
END//

SELECT * FROM ordertotals//
 

猜你喜欢

转载自blog.csdn.net/qzw752890913/article/details/82179509