> 데이터 베이스 > MySQL 튜토리얼 > mysql 저장 프로시저에 대한 자세한 소개(코드 예)

mysql 저장 프로시저에 대한 자세한 소개(코드 예)

不言
풀어 주다: 2019-02-27 13:42:44
앞으로
2937명이 탐색했습니다.

이 기사는 MySQL 저장 프로시저에 대한 자세한 소개(코드 예제)를 제공합니다. 이는 특정 참조 값을 가지고 있으므로 도움이 될 수 있습니다.

1. 저장 프로시저란 무엇입니까?

나중에 사용하기 위해 저장된 하나 이상의 MySQL 문 모음입니다.

저장 프로시저의 개념은 데이터베이스의 SQL 언어 수준에서 코드 캡슐화 및 재사용입니다.

(관련 권장사항: MySQL 튜토리얼)

2. 저장 프로시저를 사용하는 이유

  1. 사용하기 쉬운 단위로 처리를 캡슐화하고 복잡한 작업을 단순화

  2. 오류 방지 및 데이터 보안 보장

  3. 변경 사항 관리를 단순화합니다. (해당 저장프로시저의 코드를 수정하려면 해당 테이블명, 컬럼명 등을 수정하면 된다. 이를 사용하는 사람은 변경사항을 알 필요가 없다.)

  4. 성능 향상

  5. Flexible

In 일반적으로 간단하고 안전하며 고성능입니다.
단점:

  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.

5. 매개변수 사용

일반적으로 저장 프로시저는 결과를 표시하지 않고 지정한 변수에 결과를 반환합니다.

변수는 데이터를 임시로 저장하는 데 사용되는 메모리의 특정 위치입니다.

    drop procedure productpricing;
    drop procedure if EXISTS productpricing;
로그인 후 복사
키워드 OUT은 해당 매개변수가 저장 프로시저의 값을 전달하는 데 사용됨을 나타냅니다(호출자에게 반환됨).

MySQL은 IN(저장 프로시저에 전달됨),
OUT(여기서 사용된 저장 프로시저에서 전달됨)
INOUT(저장 프로시저 안팎으로 전달됨) 유형 매개변수를 지원합니다.

변수 이름 모든 MySQL 변수는 @로 시작해야 합니다.


저장 프로시저 호출

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;
로그인 후 복사

Query

call productpricing(@pricelow,@pricehign,@priceaverage);
로그인 후 복사
SELECT @priceaverage;
로그인 후 복사

사용 및 사용Create

SELECT @priceaverage,@pricehign,@pricelow;
로그인 후 복사
Call

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;
로그인 후 복사
Query

call ordertotal(20005,@total);
로그인 후 복사
6. 스마트 저장 프로시저 구축

Bas 지금까지 사용된 모든 저장 프로시저는 사실상 무엇보다도 MySQL의 간단한 SELECT 문을 캡슐화합니다. 모두 저장 프로시저의 유효한 예이지만 이러한 캡슐화된 문을 직접 사용할 수 있는 작업을 수행할 수 있습니다(더 많은 것을 가져올 수 있으면 상황이 더 복잡해집니다). 저장 프로시저의 힘은 비즈니스 규칙과 지능형 처리가 포함될 때에만 분명해집니다.

select @total;
로그인 후 복사
다음 코드를 입력합니다.

   考虑这个场景。你需要获得与以前一样的订单合计,但需要对合计增加营业税,不过只针对某些顾客(或许是你所在州中那些顾客)。那么,你需要做下面几件事情:
   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 |
+--------+
로그인 후 복사
이 예는 MySQL IF 문의 기본 사용법을 보여줍니다. IF 문은 ELSEIF 및 ELSE 절도 지원합니다(전자는 THEN 절도 사용하고 후자는 사용하지 않음). 다음 장에서는 IF(및 기타 흐름 제어 문)의 다른 용도를 살펴보겠습니다.

7. 저장 프로시저를 확인하세요

저장 프로시저를 생성하는 데 사용된 CREATE 문을 표시하려면

BOOLEAN值指定为1 表示真,指定为 0表示假(实际上,非零值都考虑为真,只有 0被视为假)。通过给中间的参数指定 0或1 ,可以有条件地将营业税加到订单合计上。
로그인 후 복사
저장 프로시저를 언제, 누가 생성했는지 등을 포함한 목록을 얻으려면

show create PROCEDURE ordertotal;
로그인 후 복사
여러 가지가 있습니다. 테이블, like

show procedure status;
로그인 후 복사

로 필터링

위 내용은 mysql 저장 프로시저에 대한 자세한 소개(코드 예)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:segmentfault.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿