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 中定义结果集有两种方法:
SELECT
语句返回结果集下面将分别介绍这两种方法。
方法一:定义输出参数并返回结果集
在存储过程中定义输出参数,可以使用OUT
和INOUT
修饰符。使用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
SELECT
문을 사용하세요.OUT
및
INOUT
수정자를 사용할 수 있습니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!