本文共 2475 字,大约阅读时间需要 8 分钟。
存储过程简单来说,就是为以后的使用而保存的一条或多条MySQL语句的集合。可将其视为批文件,虽然它们的作用不仅限于批处理。也叫作 调用
方便复用复杂的sql,提高性能。。。
DROP PROCEDURE IF EXISTS mysql_must_study.productpricing;DELIMITER $$$$CREATE PROCEDURE mysql_must_study.productpricing()BEGIN SELECT avg(prod_price) AS priceaverage FROM mysql_must_study.products u;END$$DELIMITER ;
此存储过程名为productpricing,用CREATE PROCEDURE productpricing()
语句定义。如果存储过程接受参数,它们将在()中列举出来。此存储过程没有参数,但后跟的()仍然需要。BEGIN和END语句用来限定存储过程体,过程体本身仅是一个简单的SELECT语句。
DELIMITER $$
指定$$
作为语句分隔符,为了使存储过程体内的;
生效。最后通过DELIMITER ;
恢复;
作为结束符。
除\
符号外,任何字符都可以用作语句分隔符
MySQL称存储过程的执行为调用,因此MySQL执行存储过程的语句为CALL
。CALL接受存储过程的名字以及需要传递给它的任意参数。
CALL productpricing();
DROP PROCEDURE IF EXISTS mysql_must_study.productpricing;DELIMITER $$$$CREATE PROCEDURE mysql_must_study.productpricing( OUT pl decimal(8,2), OUT ph decimal(8,2), OUT pa decimal(8,2))BEGIN SELECT min(prod_price) INTO pl FROM mysql_must_study.products ; SELECT max(prod_price) INTO ph FROM mysql_must_study.products ; SELECT Avg(prod_price) INTO pa FROM mysql_must_study.products ;END$$DELIMITER ;
CALL productpricing(@pricelow, @pricehigh, @priceaverage);
这条CALL语句给出3个参数。它们是存储过程将保存结果的3个变量的名字。
利用调用返回生成的3个变量。变量调用要加@
变量的查询使用select
SELECT @pricelow,@pricehigh,@priceaverage;
DROP PROCEDURE IF EXISTS mysql_must_study.ordertotal;DELIMITER $$$$CREATE PROCEDURE mysql_must_study.ordertotal( IN onumber int , OUT ototal decimal(8,2))BEGIN SELECT sum(item_price*quantity) FROM mysql_must_study.orderitems WHERE order_num = onumber INTO ototal;END$$DELIMITER ;
新建一个 ordertotal
调用,传入一个 onumber 参数,根据参数计算后返回一个 ototal 变量。
CALL ordertotal(20005,@total) ;
必须给 ordertotal 传递两个参数;第一个参数为订单号,第二个参数为包含计算出来的合计的变量名。
SELECT @total;
更复杂和强大的功能:可以通过传入的参数进行if判断执行对应的语句。
DROP PROCEDURE IF EXISTS mysql_must_study.ordertotal;DELIMITER $$$$CREATE PROCEDURE mysql_must_study.ordertotal( IN onumber int , IN taxable boolean, OUT ototal decimal(8,2))BEGIN DECLARE total decimal(8,2); DECLARE taxrate int DEFAULT 6; SELECT sum(item_price*quantity) FROM mysql_must_study.orderitems WHERE order_num = onumber INTO total; IF taxable THEN SELECT total+(total/100*taxrate) INTO total; END IF ; SELECT total INTO ototal;END$$DELIMITER ;
SHOW CREATE PROCEDURE ordertotal;
获得包括何时、由谁创建等详细信息的存储过程列表
@变量名
转载地址:http://dpozi.baihongyu.com/