mysql笔记(20)--使用存储过程
Posted HardyDragon_CC
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql笔记(20)--使用存储过程相关的知识,希望对你有一定的参考价值。
使用存储过程
什么是存储过程?
存储过程简单来说,就是为以后的使用而保存的一条或多条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;
来看看 IN 在存储过程中的使用,传参功能?
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;
获得包括何时、由谁创建等详细信息的存储过程列表
总结:
- 存储过程,调用,可以封装sql语句,调用时可以根据参数返回变量。
- 通过 create procedure 创建,drop删除。关键字有 in (要传入的参数的数据类型)out(要输出的变量名和其类型);
- begin 和 end 定义要执行的sql,其中 into 表示将值赋值给要 out 的变量。
- 查询变量时 select 需要
@变量名
以上是关于mysql笔记(20)--使用存储过程的主要内容,如果未能解决你的问题,请参考以下文章