mysql 저장 프로시저 루프

PHPz
풀어 주다: 2023-05-12 09:21:37
원래의
4603명이 탐색했습니다.

MySQL 저장 프로시저 루프는 저장 프로시저가 다양한 조건에 대해 특정 작업을 수행할 수 있도록 저장 프로시저에서 사용할 수 있는 매우 중요한 언어 구조입니다. 이 기사에서는 개발자가 MySQL 저장 프로시저 언어를 더 잘 이해하고 적용할 수 있도록 MySQL 저장 프로시저의 루프 구조와 사용 시나리오 및 사용법을 소개합니다.

1. MySQL 저장 프로시저의 루프 구조

MySQL 저장 프로시저에는 WHILE 루프와 FOR 루프의 두 가지 루프 구조가 있습니다. 아래에서는 문법 구조와 사용 시나리오를 차례로 소개합니다.

  1. WHILE 루프

WHILE 루프는 가장 기본적인 루프 구조이며 구문은 다음과 같습니다.

WHILE condition DO
-- 循环体语句
END WHILE;
로그인 후 복사

여기서 조건은 논리 표현식이고, 표현식이 true이면 루프 본문 문이 실행됩니다. 루프 본문 문이 실행될 때마다 조건의 값이 다시 계산됩니다. 조건이 더 이상 참이 아닐 때까지 루프 본문은 점프 아웃되고 END WHILE 이후의 문이 실행됩니다.

예를 들어, 다음 저장 프로시저는 WHILE 루프를 사용하여 1부터 n까지 숫자의 합을 계산합니다.

CREATE PROCEDURE sum(n INT)
BEGIN
DECLARE i INT DEFAULT 1;
DECLARE total INT DEFAULT 0;
WHILE i <= n DO
SET total = total + i;
SET i = i + 1;
END WHILE;
SELECT total;
END;
로그인 후 복사

여기서 변수 i와 total은 각각 합계 값과 루프 수를 계산하는 데 사용됩니다. i <= n일 때 루프 본문 문을 실행합니다.

SET total = total + i;
SET i = i + 1;
로그인 후 복사

이 문이 실행될 때마다 i > n이 될 때까지 i와 total의 값이 다시 계산됩니다. SELECT 문이 실행되고 전체 값이 반환됩니다.

  1. FOR 루프

FOR 루프는 WHILE 루프보다 간단한 루프 구조입니다.

FOR var_name [, var_name] ...  IN range DO
-- 循环体语句
END FOR;
로그인 후 복사

여기서 var_name은 루프 카운터의 이름이고 range는 루프 카운터의 범위를 나타냅니다. 범위는 다음 형식일 수 있습니다.

  • start_value TO end_value: start_value에서 시작하여 end_value에서 끝나며 루프 카운터는 매번 1씩 증가합니다.
  • start_value TO end_value BY 단계: start_value에서 시작하여 end_value에서 끝나며 루프 카운터는 매번 단계를 증가시킵니다.

예를 들어, 다음 저장 프로시저는 FOR 루프를 사용하여 1에서 n까지 숫자의 제곱을 계산합니다.

CREATE PROCEDURE square(n INT)
BEGIN
DECLARE i INT;
DECLARE v INT;
FOR i IN 1 TO n DO
SET v = i * i;
SELECT v;
END FOR;
END;
로그인 후 복사

여기서 루프 카운터 i는 1에서 n까지 매번 1씩 증가하고 루프 본문 문은

SET v = i * i;
SELECT v;
로그인 후 복사

매번 이 명령문을 실행하면 v의 값이 다시 계산됩니다. i > n이 될 때까지 루프 본문이 튀어나오고 END 문이 실행됩니다.

2. MySQL 저장 프로시저의 순환 사용 시나리오

MySQL 저장 프로시저의 순환 구조는 다음 시나리오에서 더 일반적으로 사용됩니다.

  1. 데이터 일괄 처리

MySQL 저장 프로시저의 순환 구조를 사용하여 처리할 수 있습니다. 일괄 데이터, 일회성 여러 데이터 조각을 처리하여 데이터 처리 효율성과 성능을 향상시킵니다.

예를 들어 다음 저장 프로시저는 WHILE 루프를 사용하여 제품 테이블에서 가격이 100보다 큰 항목의 가격을 일괄 5개씩 줄입니다.

CREATE PROCEDURE update_price()
BEGIN
DECLARE p_id INT;
DECLARE p_price DECIMAL(10,2);
DECLARE done INT DEFAULT FALSE;
DECLARE cur CURSOR FOR SELECT id, price FROM product WHERE price > 100;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
REPEAT
FETCH cur INTO p_id, p_price;
IF NOT done THEN
SET p_price = p_price - 5;
UPDATE product SET price = p_price WHERE id = p_id;
END IF;
UNTIL done END REPEAT;
CLOSE cur;
END;
로그인 후 복사

그 중에서 커서 cur는 다음과 같은 항목을 탐색하도록 정의됩니다. 제품 표의 가격이 100보다 큽니다. 루프를 통과할 때마다 커서에서 데이터 조각을 얻고, p_price > 100이면 제품 가격이 업데이트됩니다.

  1. 데이터 분석 및 통계

MySQL 저장 프로시저의 루프 구조는 평균, 중앙값 및 기타 통계 지표 계산과 같은 데이터 분석 및 통계에 사용될 수 있습니다.

예를 들어 다음 저장 프로시저는 WHILE 루프를 사용하여 상품 가격의 평균을 계산합니다.

CREATE PROCEDURE avg_price()
BEGIN
DECLARE p_price DECIMAL(10,2);
DECLARE total DECIMAL(10,2) DEFAULT 0;
DECLARE count INT DEFAULT 0;
DECLARE done INT DEFAULT FALSE;
DECLARE cur CURSOR FOR SELECT price FROM product;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
REPEAT
FETCH cur INTO p_price;
IF NOT done THEN
SET total = total + p_price;
SET count = count + 1;
END IF;
UNTIL done END REPEAT;
CLOSE cur;
SELECT total/count;
END;
로그인 후 복사

그 중 커서 cur는 제품 테이블의 상품 가격을 가져오고 루프를 사용하여 합계를 계산합니다. 가격과 상품 수량, 마지막으로 평균 가격을 반환합니다.

3. MySQL 저장 프로시저의 루프 사용 시 주의 사항

MySQL 저장 프로시저의 루프 구조를 사용할 때 다음 사항에 주의해야 합니다.

  1. 루프 카운터의 초기 값과 끝 값은 다음과 같습니다. 올바르게 설정하지 않으면 무한 루프나 데이터 누락이 발생할 수 있습니다.
  2. WHILE 루프에서는 루프 카운터 값을 수동으로 업데이트해야 합니다. 그렇지 않으면 루프가 영원히 계속됩니다.
  3. WHILE 루프를 사용할 때 커서가 끝까지 이동한 후 저장 프로시저가 무한 루프되는 것을 방지하려면 CONTINUE HANDLER FOR NOT FOUND 문을 올바르게 설정해야 합니다.
  4. FOR 루프에서는 올바른 루프 카운터 범위를 사용해야 합니다. 그렇지 않으면 데이터가 누락되거나 중복될 수 있습니다.

4. 요약

MySQL 저장 프로시저의 루프 구조는 개발자가 데이터를 처리하고 분석하는 데 중요한 도구로, 대량의 데이터를 효율적으로 처리하고 지표를 계산하는 데 사용할 수 있습니다. 루프 구조를 사용할 때는 저장 프로시저의 안정성과 정확성을 보장하기 위해 루프 카운터의 초기값과 끝값, 루프 문의 정확성, 커서 사용 등의 문제에 주의해야 합니다.

위 내용은 mysql 저장 프로시저 루프의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!