>데이터 베이스 >MySQL 튜토리얼 >저장 프로시저를 사용하여 MySQL 테이블의 모든 행을 어떻게 반복할 수 있습니까?

저장 프로시저를 사용하여 MySQL 테이블의 모든 행을 어떻게 반복할 수 있습니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-15 06:39:02416검색

How can I iterate through all rows in a MySQL table using a stored procedure?

프로시저를 사용하여 테이블의 모든 행을 반복

MySQL에서 테이블의 모든 행을 반복하려면 저장 프로시저를 만들어야 합니다. 프로시저를 사용하면 일련의 SQL 문을 단일 단위로 캡슐화하고 이를 블록으로 실행할 수 있습니다.

프로시저 생성

테이블의 모든 행을 반복하려면 'A'를 입력하고 특정 작업을 수행하려면 다음 구문을 사용하여 프로시저를 생성합니다.

DROP PROCEDURE IF EXISTS ROWPERROW; -- Delete existing procedure if any

DELIMITER ;; -- Change delimiter to avoid statement-by-statement execution

CREATE PROCEDURE ROWPERROW()
BEGIN
  DECLARE n INT DEFAULT 0; -- Declare a variable to count rows
  DECLARE i INT DEFAULT 0; -- Declare a variable for looping
  SELECT COUNT(*) INTO n FROM table_A; -- Get the total number of rows
  SET i = 0; -- Initialize loop counter
  WHILE i < n DO
    -- Insert the current row into table 'B'
    INSERT INTO table_B(ID, VAL) SELECT (ID, VAL) FROM table_A LIMIT i, 1;
    SET i = i + 1; -- Increment loop counter
  END WHILE;
End;
;;

DELIMITER ; -- Reset the delimiter

프로시저 실행

프로시저가 생성되면 호출할 수 있습니다. 다음 구문을 사용합니다.

CALL ROWPERROW();

이것은 프로시저를 실행하고 테이블 'A'의 각 행을 반복하여 지정된 작업을 수행합니다.

'ID'와 'VAL' 필드가 있는 'A'와 'B'라는 두 개의 테이블이 있다고 가정해 보겠습니다. 다음 프로시저는 'A' 테이블의 모든 행을 반복하고 데이터를 'B' 테이블에 복사합니다.

DROP PROCEDURE IF EXISTS ROWPERROW;
DELIMITER ;;

CREATE PROCEDURE ROWPERROW()
BEGIN
  DECLARE n INT DEFAULT 0;
  DECLARE i INT DEFAULT 0;
  SELECT COUNT(*) INTO n FROM table_A;
  SET i = 0;
  WHILE i < n DO
    INSERT INTO table_B(ID, VAL) SELECT (ID, VAL) FROM table_A LIMIT i, 1;
    SET i = i + 1;
  END WHILE;
End;
;;

DELIMITER ;

프로시저를 실행하고 데이터를 복사하려면 다음 명령을 실행합니다.

CALL ROWPERROW();

위 내용은 저장 프로시저를 사용하여 MySQL 테이블의 모든 행을 어떻게 반복할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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