MySQL 저장 프로시저에서 결과 세트를 반환하는 방법

PHPz
풀어 주다: 2023-04-21 13:48:32
원래의
3283명이 탐색했습니다.

MySQL 저장 프로시저는 필요할 때 호출하고 실행할 수 있는 미리 정의된 SQL 문 집합입니다. 저장 프로시저는 코드를 재사용 가능하게 만들고 데이터베이스 성능을 향상시키는 동시에 개발 보안도 향상시킬 수 있습니다.

MySQL에서는 저장 프로시저가 결과 세트를 반환할 수 있습니다. 대부분의 경우 저장 프로시저를 사용하여 결과 집합을 반환하면 코드가 더 간결하고 명확해지고 쿼리 성능도 향상될 수 있습니다. 이 문서에서는 MySQL 저장 프로시저에서 결과 집합을 반환하는 방법을 소개합니다.

결과 집합이 있는 저장 프로시저 만들기

저장 프로시저를 사용하여 결과 집합을 반환하기 전에 결과 집합이 있는 저장 프로시저를 만드는 방법을 이해해야 합니다. 다음은 결과 집합이 포함된 간단한 저장 프로시저를 생성하는 예입니다.

CREATE PROCEDURE get_all_users()
BEGIN
    SELECT * FROM users;
END
로그인 후 복사

위 예에서는 get_all_users()라는 저장 프로시저를 생성했습니다. get_all_users() 저장 프로시저가 호출되면 users 데이터 테이블의 모든 행이 반환됩니다. get_all_users() 的存储过程。当调用 get_all_users() 存储过程时,它将会返回 users 数据表中的所有数据行。

注意,在存储过程中返回结果集之前,我们需要先定义结果集,MySQL 中定义结果集有两种方法:

  1. 定义输出参数并返回结果集
  2. 使用 SELECT 语句返回结果集

下面将分别介绍这两种方法。

方法一:定义输出参数并返回结果集

在存储过程中定义输出参数,可以使用 OUTINOUT 修饰符。使用 OUT 修饰符定义的参数表示该参数比存储过程执行时的输入参数更多了一个作用,它额外将被用于存储存储过程的结果集。

在下面的示例中,我们使用 OUT 修饰符定义一个名称为 results 的参数:

CREATE PROCEDURE get_all_users_2(OUT results VARCHAR(255))
BEGIN
    SELECT * FROM users;
    INTO results; 
END
로그인 후 복사

在上面的示例中,我们使用 SELECT INTO 语句将查询结果保存到 results 参数中。

调用如下:

CALL get_all_users_2(@results);

SELECT @results;
로그인 후 복사

在上面的示例中,我们首先调用存储过程 get_all_users_2(),并将结果存储在 @results 变量中。 然后,我们在 SELECT 语句中访问了 @results 变量,从而获取了存储过程返回的结果集。

方法二:使用 SELECT 语句返回结果集

另一种使用存储过程返回结果集的方法是,使用 SELECT 语句来返回结果集。这种方法特别适用于当我们需要返回多个结果集时。

下面的示例中,我们定义了一个带有两个 SELECT 语句的存储过程:

CREATE PROCEDURE get_all_users_3()
BEGIN
    SELECT * FROM users WHERE age > 18;
    SELECT * FROM users WHERE age <= 18;
END
로그인 후 복사

在上面的示例中,我们使用两个 SELECT 语句,来分别返回 users 表中所有年龄大于 18 岁和小于等于 18 岁的数据行。

在调用这个存储过程后,我们可以通过多次调用 mysql_store_result()mysql_fetch_row() 函数来获取每个结果集的行数据。

mysql_query("CALL get_all_users_3()");
MYSQL_RES *res = mysql_store_result(&mysql);
MYSQL_ROW row;

while ((row = mysql_fetch_row(res))) {
    printf("%s %d\n", row[1], stoi(row[2]));
}

mysql_next_result(&mysql);

res = mysql_store_result(&mysql);

while ((row = mysql_fetch_row(res))) {
    printf("%s %d\n", row[1], stoi(row[2]));
}
로그인 후 복사

上面的代码展示了如何通过在 mysql_query() 函数中调用存储过程来获取结果集,以及如何使用 mysql_store_result() 函数和 mysql_fetch_row() 函数来获取和处理我们的结果集数据。

结论

在MySQL中,存储过程可以返回结果集。我们可以通过定义输出参数来存储存储过程的结果集,也可以直接使用 SELECT

저장 프로시저에서 결과 집합을 반환하기 전에 먼저 결과 집합을 정의해야 합니다. MySQL에서 결과 집합을 정의하는 방법에는 두 가지가 있습니다. 🎜
  1. 출력 매개변수를 정의하고 결과 집합을 반환합니다.
  2. 결과 세트를 반환하려면 SELECT 문을 사용하세요.
🎜이 두 가지 방법은 아래에 소개됩니다. 🎜🎜방법 1: 출력 매개변수 정의 및 결과 세트 반환🎜🎜저장 프로시저에서 출력 매개변수를 정의하려면 OUTINOUT 수정자를 사용할 수 있습니다. OUT 한정자를 사용하여 정의된 매개변수는 저장 프로시저가 실행될 때 입력 매개변수보다 한 가지 더 많은 역할을 가짐을 나타냅니다. 이는 저장 프로시저의 결과 세트를 저장하는 데 추가로 사용됩니다. 🎜🎜아래 예에서는 OUT 수정자를 사용하여 results라는 매개변수를 정의합니다. 🎜rrreee🎜위 예에서는 SELECT The INTO 문은 쿼리 결과를 <code>results 매개변수에 저장합니다. 🎜🎜호출은 다음과 같습니다. 🎜rrreee🎜위의 예에서는 먼저 저장 프로시저 get_all_users_2()를 호출하고 결과를 @results 변수에 저장합니다. 그런 다음 SELECT 문의 @results 변수에 액세스하여 저장 프로시저에서 반환된 결과 집합을 얻습니다. 🎜🎜방법 2: SELECT 문을 사용하여 결과 집합 반환🎜🎜저장 프로시저를 사용하여 결과 집합을 반환하는 또 다른 방법은 SELECT 문을 사용하여 결과 집합을 반환하는 것입니다. 결과 세트. 이 접근 방식은 여러 결과 세트를 반환해야 할 때 특히 유용합니다. 🎜🎜아래 예에서는 두 개의 SELECT 문을 사용하여 저장 프로시저를 정의합니다. 🎜rrreee🎜위 예에서는 두 개의 SELECT 문을 사용하여 모든 데이터 행을 반환합니다. 나이가 18세 이상 18세 이하인 users 테이블에서. 🎜🎜이 저장 프로시저를 호출한 후 mysql_store_result()mysql_fetch_row() 함수를 여러 번 호출하여 각 결과 집합의 행 데이터를 가져올 수 있습니다. 🎜rrreee🎜위 코드는 mysql_query() 함수에서 저장 프로시저를 호출하여 결과 세트를 얻는 방법과 mysql_store_result() 함수를 mysql_fetch_row () 함수를 사용하여 결과 세트 데이터를 얻고 처리합니다. 🎜🎜결론🎜🎜MySQL에서는 저장 프로시저가 결과 세트를 반환할 수 있습니다. 출력 매개변수를 정의하여 저장 프로시저의 결과 세트를 저장할 수도 있고, SELECT 문을 직접 사용하여 저장 프로시저의 결과 세트를 반환할 수도 있습니다. 어느 쪽이든 쿼리 성능과 코드 명확성이 더 향상됩니다. 🎜

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

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