CREATEPROCEDURE get_order_by_cust( IN cust_no INT, OUT shipped INT, OUT canceled INT, OUT resolved INT, OUT disputed INT) BEGIN -- shipped SELECT count(*) INTO shipped FROM orders WHERE customerNumber = cust_no AND status ='Shipped';
-- canceled SELECT count(*) INTO canceled FROM orders WHERE customerNumber = cust_no AND status ='Canceled';
-- resolved SELECT count(*) INTO resolved FROM orders WHERE customerNumber = cust_no AND status ='Resolved';
-- disputed SELECT count(*) INTO disputed FROM orders WHERE customerNumber = cust_no AND status ='Disputed';
CREATEFUNCTION CustomerLevel(p_creditLimit double) RETURNSVARCHAR(10) DETERMINISTIC BEGIN DECLARE lvl varchar(10);
IF p_creditLimit >50000THEN SET lvl ='PLATINUM'; ELSEIF (p_creditLimit <=50000AND p_creditLimit >=10000) THEN SET lvl ='GOLD'; ELSEIF p_creditLimit <10000THEN SET lvl ='SILVER'; END IF;
RETURN (lvl); END $$ DELIMITER ;
SELECT customerName, CustomerLevel(creditLimit) FROM customers ORDERBY customerName LIMIT 10;
+------------------------------+----------------------------+ | customerName | CustomerLevel(creditLimit) | +------------------------------+----------------------------+ | Alpha Cognac | PLATINUM | | American Souvenirs Inc | SILVER | | Amica Models & Co. | PLATINUM | | ANG Resellers | SILVER | | Anna's Decorations, Ltd | PLATINUM | | Anton Designs, Ltd. | SILVER | | Asian Shopping Network, Co | SILVER | | Asian Treasures, Inc. | SILVER | | Atelier graphique | GOLD | | Australian Collectables, Ltd | PLATINUM | +------------------------------+----------------------------+ 10 rows in set (0.00 sec)
在存储过程中使用存储函数,提高可读性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
DELIMITER $$
CREATEPROCEDURE GetCustomerLevel( IN p_customerNumber INT(11), OUT p_customerLevel varchar(10) ) BEGIN DECLARE creditlim DOUBLE;
SELECT creditlimit INTO creditlim FROM customers WHERE customerNumber = p_customerNumber;
SELECT CUSTOMERLEVEL(creditlim) INTO p_customerLevel; END $$ DELIMITER ;