旗下导航:搜·么
当前位置:网站首页 > MySQL教程 > 正文

mysql存储历程的细致引见(代码示例)【MySQL教程】,mysql,存储过程

作者:搜教程发布时间:2019-12-01分类:MySQL教程浏览:53评论:0


导读:本篇文章给人人带来的内容是关于mysql存储历程的细致引见(代码示例),有肯定的参考价值,有须要的朋侪能够参考一下,愿望对你有所协助。1、什么是存储历程为今后的运用而保留的...

本篇文章给人人带来的内容是关于mysql存储历程的细致引见(代码示例),有肯定的参考价值,有须要的朋侪能够参考一下,愿望对你有所协助。

1、什么是存储历程

为今后的运用而保留的一条或多条MySQL语句的鸠合。

存储历程思想上就是数据库 SQL 言语层面的代码封装与重用。

(相干引荐:MySQL教程)

2、为何要运用存储历程

  1. 把处置惩罚封装在轻易运用的单位中,简化庞杂的操纵

  2. 防备毛病保证了数据的一致性

  3. 简化对更改的治理。(修正对应表名、列名等修正对应存储历程的代码,关于运用的人不须要知道变化)

  4. 进步机能

  5. 天真

总的来说是简朴、平安、高机能
瑕玷:

  1. 编写比SQL语句庞杂

  2. 权限题目(能够无权、平常都是运用存储历程、没有竖立存储历程的权限)

3、竖立存储历程

CREATE  PROCEDURE productpricing()
BEGIN
SELECT Avg(prod_price) AS priceaverage
FROM products;
END

注重:在命令行中输入的题目

mysql> delimiter //
mysql> CREATE PROCEDURE productpricing()
    -> BEGIN
    -> SELECT Avg(prod_price) AS priceaverage
    -> FROM products;
    -> END //

4、运用存储历程

存储历程实际上是一种函数

CALL productpricing();

4、删除存储历程

    drop procedure productpricing;
    drop procedure if EXISTS productpricing;

5、运用参数

平常,存储历程并不显现效果,而是把效果返回给你指定的变量
变量(variable)内存中一个特定的位置,用来暂时存储数据。

CREATE PROCEDURE productpricing(
    OUT p1 DECIMAL(8,2),
    OUT ph DECIMAL(8,2),
    OUT pa DECIMAL(8,2)
)
BEGIN
SELECT MIN(prod_price)
INTO p1
FROM products;
SELECT MAX(prod_price)
INTO ph
FROM products;
SELECT avg(prod_price)
INTO pa
FROM products;
END;

关键字OUT指出响应的参数用来从存储历程传出 一个值(返回给挪用者)。
MySQL支撑IN(传递给存储历程)、
OUT(从存 储历程传出,如这里所用)
INOUT(对存储历程传入和传出)范例的参 数。

变量名 一切MySQL变量都必须以@最先。
挪用存储历程

call productpricing(@pricelow,@pricehign,@priceaverage);

查询

SELECT @priceaverage;
SELECT @priceaverage,@pricehign,@pricelow;

运用in和out
竖立

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;

挪用

call ordertotal(20005,@total);

查询

select @total;

6、竖立智能存储历程

迄今为止运用的一切存储历程基础上都是封装 MySQL简朴的SELECT语句。虽然它们全都是有用的存储历程例子,但它们所能完成的事变你直接用这些被封装的语句就可以完成(假如说它们还能带来更多的东西。那就是使事变更庞杂)。只要在存储历程内包含营业划定规矩和智能处置惩罚时,它们的威力才真正显现出来。

   斟酌这个场景。你须要取得与之前一样的定单算计,但须要对算计增添营业税,不过只针对某些主顾(也许是你地点州中那些主顾)。那末,你须要做下面几件事变:
   1、取得算计(和之前一样)
   2、把营业税有条件的增加到算计
   3、返回算计(带或不带税的)

我们输入以下代码:

-- Name: ordertotal        //   增加解释
-- Parameters: onumber = order number
--             taxable = 0 if not taxable, 1 if taxtable
--             ototal = order total variable

CREATE     PROCEDURE ordertotal (
IN onumber INT,
IN taxable BOOLEAN,
OUT ototal DECIMAL(8,2)
) COMMENT 'Obtain order total, optionally adding tax'
BEGIN
    
        -- Declare variable for total
        DECLARE total DECIMAL(8,2);     //   声明变量   
        -- Declare tax percentage
        DECLARE taxrate INT DEFAULT 6;
        
        -- Get the order total
        SELECT Sum(item_price*quantity)
        FROM orderitems
        WHERE order_num = onumber
        INTO total;
        
        -- Is this taxable?
        IF taxable THEN
            -- yes,so add taxrate to the total
            SELECT total+(total/100*taxrate) INTO total;
        END IF;
        --  And finally, save to out variable
        SELECT total INTO ototal;
END;
此存储历程有很大的更改。起首,增添了解释(前面安排 --)。在存储历程庞杂性增添时,如许做迥殊主要。  
增加了别的一个参数 taxable,它是一个布尔值(假如要增添税则为真,否则为假)。  
在存储历程体中,用 DECLARE语句定义了两个局部变量。 DECLARE请求指定变量名和数据范例,
它也支撑可选的默许值(这个例子中的 taxrate的默许被设置为 6%)。SELECT 语句变,因而其效果存储到 total(局部变量)而不是 ototal。  
IF 语句搜检taxable是不是为真,假如为真,则用另一SELECT语句增添营业税到局部变量 total。

末了,用另一SELECT语句将total(它增添也许不增添营业税)保留到 ototal。  
注重:COMMENT关键字 ,本例子中的存储历程在 CREATE PROCEDURE语句中包含了一个 COMMENT值。  
它不是必须的,但假如给出,将在SHOW PROCEDURE STATUS的效果中显现。

这显然是一个更高等,功用更强的存储历程。为实验它,请用以下两条语句:  
第一条:
call ordertotal(20005, 0, @total);
SELECT @total;
输出:
+--------+
| @total |
+--------+
|  38.47 |
+--------+
第二条:
call ordertotal(20009, 1,@total);
SELECT @total;
输出:
+--------+
| @total |
+--------+
|  36.21 |
+--------+
BOOLEAN值指定为1 示意真,指定为 0示意假(实际上,非零值都斟酌为真,只要 0被视为假)。通过给中心的参数指定 0或1 ,能够有条件地将营业税加到定单算计上。

这个例子给出了 MySQL的IF 语句的基础用法。 IF语句还支撑 ELSEIF和ELSE 子句(前者还运用 THEN子句,后者不运用)。在今后章节中我们将会看到 IF的其他用法(以及其他流掌握语句)。

7、搜检存储历程

为显现用来竖立一个存储历程的CREATE语句

show create PROCEDURE ordertotal;

为了取得包含什么时候、由谁竖立等细致信息的存储历程列表

show procedure status;

表比较多,用like过滤

show procedure status like 'ordertotal';

以上就是mysql存储历程的细致引见(代码示例)的细致内容,更多请关注ki4网别的相干文章!

标签:mysql存储过程


欢迎 发表评论: