동적 쿼리를 사용하여 저장 프로시저의 변수에 쿼리 결과 출력
동적 쿼리는 데이터베이스 프로그래밍에 유연성을 제공합니다. MySQL에서는 저장 프로시저 내에서 동적 쿼리를 생성하고 실행하여 결과를 얻을 수 있습니다. 그러나 일반적인 질문이 생깁니다. 이러한 쿼리의 출력을 저장 프로시저의 OUT 매개 변수로 캡처하는 방법은 무엇입니까?
레코드(query1)를 계산하고 데이터(query2)를 검색하기 위해 동적 쿼리를 구성하는 다음 예를 고려하십시오. ):
CREATE PROCEDURE 'searchInvoice' ( OUT numOfRecords INT ) BEGIN DECLARE query1 TEXT; DECLARE query2 TEXT; SET query1 = 'SELECT COUNT(*) bla bla bla.....'; // Query1 to select the count of matching tuples.. SET query2 = 'SELECT * from bla bla bla....'; // Query2 to select original records... // later part of this both queries generate dynamically according to some IN parameters.. // now I wanna assign the output of the query1 into numOfRecords // and I wanna execute the query2 as well.. like this SET @Sql = query2; PREPARE STMT FROM @Sql; EXECUTE STMT; DEALLOCATE PREPARE STMT; // output of the query2 can be read in PHP END
이 문제를 해결하려면 아래 그림과 같이 수정된 접근 방식을 사용할 수 있습니다.
CREATE TABLE table1( column1 VARCHAR(255) DEFAULT NULL, column2 VARCHAR(255) DEFAULT NULL, column3 VARCHAR(255) DEFAULT NULL ); INSERT INTO table1 VALUES ('1', 'value1', 'value2'), ('2', 'value3', 'value4'); DELIMITER $$ CREATE PROCEDURE procedure1(IN Param1 VARCHAR(255), OUT Param2 VARCHAR(255), OUT Param3 VARCHAR(255)) BEGIN SET @c2 = ''; SET @c3 = ''; SET @query = 'SELECT column2, column3 INTO @c2, @c3 FROM table1 WHERE column1 = ?'; PREPARE stmt FROM @query; SET @c1 = Param1; EXECUTE stmt USING @c1; DEALLOCATE PREPARE stmt; SET Param2 = @c2; SET Param3 = @c3; END$$ DELIMITER ; -- Call procedure and use variables SET @Param1 = 2; SET @Param2 = ''; SET @Param3 = ''; CALL procedure1(@Param1, @Param2, @Param3); SELECT @Param2, @Param3;
이것은 메서드는 동적 쿼리의 출력을 보관하기 위해 변수(@c2 및 @c3)를 초기화하고 이러한 변수를 데이터베이스의 데이터로 채우는 쿼리(@query)를 구성합니다. 그런 다음 쿼리가 준비되고 지정된 매개변수로 실행되며 프로시저를 종료하기 전에 결과가 OUT 매개변수(Param2 및 Param3)에 할당됩니다.
위 내용은 MySQL 저장 프로시저에서 동적 쿼리의 출력을 OUT 매개변수로 캡처하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!