ホームページ > データベース > mysql チュートリアル > MySQL ストアド プロシージャ内の動的クエリから出力を取得するにはどうすればよいですか?

MySQL ストアド プロシージャ内の動的クエリから出力を取得するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-17 16:51:11
オリジナル
689 人が閲覧しました

How to Retrieve Output from Dynamic Queries within MySQL Stored Procedures?

MySQL ストアド プロシージャでの動的クエリの実行と出力の取得

MySQL では、ストアド プロシージャを使用して複雑な操作を効率的に実行できます。一般的なシナリオの 1 つは、入力パラメーターに基づいてクエリを動的に生成し、結果を変数に取得することです。

これを実現するには、プリペアド ステートメントと出力パラメーターを利用できます。次のストアド プロシージャについて考えてみましょう。

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
ログイン後にコピー

query1 の出力を numOfRecords パラメータに取得するには、次のアプローチを使用できます。

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;
ログイン後にコピー

この例では、

  1. SET @c2 = '' および SET @c3 = '' ステートメントは出力を初期化します。パラメータ。
  2. SET @query = 'SELECT ...' ステートメントはクエリを動的に準備します。
  3. SET @c1 = Param1 ステートメントは入力パラメータをクエリに割り当てます。
  4. EXECUTE stmt USING @c1 ステートメントは、準備されたクエリを実行します。
  5. DEALLOCATE PREPARE stmt ステートメントは、準備されたステートメントのリソースを解放します。
  6. SET Param2 = @c2 および SET Param3 = @c3 ステートメントは、出力値をパラメーターに割り当てます。
  7. 最後に、SELECT @Param2、@ Param3 ステートメントは出力値を取得します。

この手法を利用すると、次の値を取得できます。 MySQL ストアド プロシージャ内の変数に動的に生成されたクエリの出力。

以上がMySQL ストアド プロシージャ内の動的クエリから出力を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート