이 기사는 MySQL 저장 프로시저에 대한 자세한 소개(코드 예제)를 제공합니다. 이는 특정 참조 값을 가지고 있으므로 도움이 될 수 있습니다.
1. 저장 프로시저란 무엇입니까?
나중에 사용하기 위해 저장된 하나 이상의 MySQL 문 모음입니다.
저장 프로시저의 개념은 데이터베이스의 SQL 언어 수준에서 코드 캡슐화 및 재사용입니다.
(관련 권장사항: MySQL 튜토리얼)
2. 저장 프로시저를 사용하는 이유
사용하기 쉬운 단위로 처리를 캡슐화하고 복잡한 작업을 단순화
오류 방지 및 데이터 보안 보장
변경 사항 관리를 단순화합니다. (해당 저장프로시저의 코드를 수정하려면 해당 테이블명, 컬럼명 등을 수정하면 된다. 이를 사용하는 사람은 변경사항을 알 필요가 없다.)
성능 향상
Flexible
In 일반적으로 간단하고 안전하며 고성능입니다.
단점:
작성이 SQL 문보다 복잡합니다.
권한 문제(권한이 없을 수도 있고 일반적으로 저장 프로시저를 사용하며 저장 프로시저를 생성할 권한이 없을 수도 있음) )
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 //
저장 프로시저가 실제로는 함수입니다
CALL productpricing();
변수는 데이터를 임시로 저장하는 데 사용되는 메모리의 특정 위치입니다.
drop procedure productpricing; drop procedure if EXISTS productpricing;
MySQL은 IN(저장 프로시저에 전달됨),
OUT(여기서 사용된 저장 프로시저에서 전달됨)
INOUT(저장 프로시저 안팎으로 전달됨) 유형 매개변수를 지원합니다.
저장 프로시저 호출
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;
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;
考虑这个场景。你需要获得与以前一样的订单合计,但需要对合计增加营业税,不过只针对某些顾客(或许是你所在州中那些顾客)。那么,你需要做下面几件事情: 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 ,可以有条件地将营业税加到订单合计上。
show create PROCEDURE ordertotal;
show procedure status;
로 필터링
위 내용은 mysql 저장 프로시저에 대한 자세한 소개(코드 예)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!