>  기사  >  데이터 베이스  >  MySQL에서 계산된 수량을 계산하기 위해 재귀 저장 프로시저를 어떻게 사용할 수 있습니까?

MySQL에서 계산된 수량을 계산하기 위해 재귀 저장 프로시저를 어떻게 사용할 수 있습니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-01 07:24:30707검색

How Can You Use Recursive Stored Procedures to Calculate Computed Quantities in MySQL?

계산 수량 계산을 위한 저장 프로시저 재귀

주어진 항목의 계산 수량을 결정하기 위해 MySQL에서 재귀 저장 프로시저를 생성하려면 테이블 구조와 재귀 논리를 이해해야 합니다.

문제 배경

'id', 'parent_id' 및 '수량' 열이 있는 테이블이 주어지면 목표는 항목의 총 수량을 다음과 같이 계산하는 것입니다. 부모-자식 관계를 재귀적으로 순회합니다. 예를 들어 항목 6의 계산된 수량은 240입니다. 상위 항목이 5(수량 4), 3(수량 2), 2(수량 10)이기 때문입니다.

해결책: 재귀 저장 프로시저

<code class="mysql">DELIMITER $$

CREATE PROCEDURE calctotal(
   IN number INT,
   OUT total INT
)

BEGIN

   DECLARE parent_ID INT DEFAULT NULL ;
   DECLARE tmptotal INT DEFAULT 0;
   DECLARE tmptotal2 INT DEFAULT 0;

   SELECT parentid   FROM test   WHERE id = number INTO parent_ID;   
   SELECT quantity   FROM test   WHERE id = number INTO tmptotal;     

   IF parent_ID IS NULL
    THEN
    SET total = tmptotal;
   ELSE     
    CALL calctotal(parent_ID, tmptotal2);
    SET total = tmptotal2 * tmptotal;   
   END IF;

END$$

DELIMITER ;</code>

프로시저 호출

저장 프로시저를 호출하고 항목 6에 대해 계산된 수량을 얻으려면:

<code class="mysql">SET @@GLOBAL.max_sp_recursion_depth = 255;
SET @@session.max_sp_recursion_depth = 255; 

CALL calctotal(6, @total);
SELECT @total;</code>

프로시저 분석

  • 입력 및 출력 매개변수: IN 숫자는 시작 항목을 지정하고 OUT total은 계산된 수량을 반환합니다.
  • 재귀 논리: 해당 항목의 상위 ID와 수량을 검색하여 parent_ID 및 tmptotal에 저장합니다. 상위 항목이 없는 경우(즉, 항목이 루트에 있는 경우) total은 tmptotal로 설정됩니다. 그렇지 않으면 parent_ID를 입력으로 사용하여 calctotal에 대한 재귀 호출이 수행되고 결과는 tmptotal2에 저장됩니다. 그런 다음 계산된 총계는 total = tmptotal2 * tmptotal로 계산됩니다.
  • 프로시저 호출: 프로시저를 호출하기 전에 과도한 재귀로 인한 오류를 방지하기 위해 최대 재귀 깊이를 조정해야 합니다. 실제 호출은 6을 입력으로 사용하고 계산된 합계는 @total 변수에 저장되며 SELECT @total을 사용하여 검색할 수 있습니다.

위 내용은 MySQL에서 계산된 수량을 계산하기 위해 재귀 저장 프로시저를 어떻게 사용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.