> 데이터 베이스 > MySQL 튜토리얼 > MySQL 저장 프로시저의 결과 세트에 대한 자세한 설명

MySQL 저장 프로시저의 결과 세트에 대한 자세한 설명

PHPz
풀어 주다: 2023-04-21 11:45:41
원래의
2877명이 탐색했습니다.

MySQL 저장 프로시저는 컴파일되어 데이터베이스에 저장되는 SQL 문 집합이며 반복적으로 호출될 수 있습니다. 저장 프로시저는 매개변수를 받아들이고, 일련의 작업을 수행하고, 다양한 방법으로 결과를 반환할 수 있습니다. 이 기사에서는 주로 MySQL 저장 프로시저의 결과 세트를 소개합니다.

1. MySQL 저장 프로시저의 결과 세트

MySQL 저장 프로시저의 결과 세트는 다음 방법 중 하나로 반환될 수 있습니다.

  1. RETURN 문

저장 프로시저는 RETURN 문을 사용하여 값을 반환할 수 있습니다. , 이 값은 정수, 부동 소수점 숫자, 날짜, 시간, 문자열 등이 될 수 있습니다. 저장 프로시저가 결과를 반환하지 않으면 RETURN 문을 사용하여 저장 프로시저의 실행을 종료할 수 있습니다.

예를 들어 다음 저장 프로시저는 두 입력 매개 변수의 곱을 반환합니다.

CREATE PROCEDURE myProc(IN a INT, IN b INT)
BEGIN
    DECLARE result INT;
    SET result = a * b;
    RETURN result;
END;
로그인 후 복사
  1. OUT 매개 변수

저장 프로시저는 OUT 매개 변수를 사용하여 하나 이상의 값을 반환할 수 있습니다. OUT 매개변수는 저장 프로시저의 매개변수 목록에서 선언되어야 하며 저장 프로시저 내에서 할당되어야 합니다. 저장 프로시저가 종료되면 호출자는 이러한 값을 검색할 수 있습니다.

예를 들어, 다음 저장 프로시저는 두 입력 매개변수의 합과 차이를 반환합니다.

CREATE PROCEDURE myProc(IN a INT, IN b INT, OUT sum INT, OUT difference INT)
BEGIN
    SET sum = a + b;
    SET difference = a - b;
END;
로그인 후 복사
  1. SELECT 문

저장 프로시저는 SELECT 문을 사용하여 하나 이상의 결과 집합을 반환할 수 있습니다. 결과 집합에는 하나 이상의 데이터 행이 포함될 수 있으며, 각 행은 필드 집합으로 구성됩니다.

예를 들어, 다음 저장 프로시저는 Employee 테이블의 모든 직원 정보를 반환합니다.

CREATE PROCEDURE myProc()
BEGIN
    SELECT * FROM Employee;
END;
로그인 후 복사
  1. SET 문

저장 프로시저는 SET 문을 사용하여 사용자 변수를 반환할 수 있습니다. 사용자 변수는 정수, 부동 소수점 숫자, 날짜, 문자열 등과 같은 모든 유형의 값을 저장할 수 있습니다.

예를 들어, 다음 저장 프로시저는 Employee 테이블에 직원 이름을 반환합니다.

CREATE PROCEDURE myProc(IN employeeID INT, OUT employeeName VARCHAR(255))
BEGIN
    SELECT name INTO @employeeName FROM Employee WHERE ID = employeeID;
    SET employeeName = @employeeName;
END;
로그인 후 복사

2. MySQL 저장 프로시저가 결과 집합을 처리하는 방법

저장 프로시저는 다음 방법을 사용하여 결과 집합을 처리할 수 있습니다.

  1. Loop

저장 프로시저는 루프를 사용하여 결과 집합의 각 데이터 행을 반복하고 데이터를 처리할 수 있습니다.

예를 들어 다음 저장 프로시저는 Employee 테이블의 모든 직원 이름을 반환합니다.

CREATE PROCEDURE myProc()
BEGIN
    DECLARE employeeName VARCHAR(255);
    DECLARE done INT DEFAULT FALSE;
    DECLARE cur CURSOR FOR SELECT name FROM Employee;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
    
    OPEN cur;
    
    get_employee: LOOP
        FETCH cur INTO employeeName;
        
        IF done THEN
            LEAVE get_employee;
        END IF;
        
        SELECT employeeName;
    END LOOP;
    
    CLOSE cur;
END;
로그인 후 복사
  1. Cursor

저장 프로시저는 커서를 사용하여 결과 집합의 각 데이터 행을 탐색하고 데이터를 처리할 수 있습니다.

예를 들어 다음 저장 프로시저는 Employee 테이블의 모든 직원 이름을 반환합니다.

CREATE PROCEDURE myProc()
BEGIN
    DECLARE employeeName VARCHAR(255);
    DECLARE cur CURSOR FOR SELECT name FROM Employee;
    
    OPEN cur;
    
    get_employee: LOOP
        FETCH cur INTO employeeName;
        
        IF done THEN
            LEAVE get_employee;
        END IF;
        
        SELECT employeeName;
    END LOOP;
    
    CLOSE cur;
END;
로그인 후 복사
  1. Subquery

저장 프로시저는 하위 쿼리를 사용하여 결과 집합의 행 및 열 데이터를 처리할 수 있습니다. 하위 쿼리는 저장 프로시저의 결과 집합을 다른 쿼리로 결합할 수 있습니다.

예를 들어 다음 저장 프로시저는 Employee 테이블의 모든 직원 정보를 반환합니다.

CREATE PROCEDURE myProc()
BEGIN
    SELECT *
    FROM Employee
    WHERE departmentID = (
        SELECT ID FROM Department WHERE name = 'Sales'
    );
END;
로그인 후 복사

3. MySQL 저장 프로시저 결과 집합 최적화

저장 프로시저는 다음 기술을 사용하여 결과 집합 처리를 최적화할 수 있습니다.

  1. 인덱스 사용

저장 프로시저는 인덱스를 사용하여 결과 집합 쿼리 속도를 높일 수 있습니다. MySQL은 B-트리, 해시 및 전체 텍스트 인덱스를 포함한 여러 인덱스 유형을 지원합니다.

예를 들어, 다음 저장 프로시저에서는 Employee 테이블의 ID 필드를 사용하여 인덱스를 생성할 수 있습니다.

CREATE INDEX idx_employee ON Employee(ID);
로그인 후 복사
  1. 결과 세트 수 제한

저장 프로시저는 LIMIT 문을 사용하여 인덱스를 제한할 수 있습니다. 결과 세트의 수. 이를 통해 저장 프로시저의 실행 시간과 메모리 공간을 줄일 수 있습니다.

예를 들어, 다음 저장 프로시저에서는 LIMIT 문을 사용하여 처음 10명의 직원 정보를 반환할 수 있습니다.

CREATE PROCEDURE myProc()
BEGIN
    SELECT *
    FROM Employee
    LIMIT 10;
END;
로그인 후 복사
  1. 메모리 테이블 사용

저장 프로시저는 메모리 테이블을 사용하여 임시 테이블을 생성할 수 있습니다. 결과 집합. 인메모리 테이블은 일반적으로 디스크 테이블보다 빠르지만 디스크 테이블보다 더 많은 메모리 공간을 차지합니다.

예를 들어 다음 저장 프로시저에서는 메모리 엔진을 사용하여 임시 결과 집합을 생성할 수 있습니다.

CREATE TEMPORARY TABLE tempEmployee ENGINE=MEMORY
SELECT * FROM Employee;
로그인 후 복사

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

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