ホームページ >データベース >mysql チュートリアル >動的クエリの出力を MySQL ストアド プロシージャの OUT パラメータにキャプチャする方法
動的クエリを使用したストアド プロシージャの変数へのクエリ結果の出力
動的クエリはデータベース プログラミングに柔軟性をもたらします。 MySQL では、ストアド プロシージャ内で動的クエリを生成し、それを実行して結果を取得することができます。ただし、一般的な疑問が生じます: このようなクエリの出力をストアド プロシージャの OUT パラメーターに取り込むにはどうすればよいですか?
レコードをカウントし (クエリ 1)、データを取得する (クエリ 2) ように動的クエリが構築されている次の例を考えてみましょう。 ):
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 中国語 Web サイトの他の関連記事を参照してください。