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

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

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 문은 쿼리 결과를 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으로 문의하세요.
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!