MySQL ストアド プロシージャは、必要なときに呼び出して実行できる、事前に作成された SQL 命令のコレクションです。ストアド プロシージャは通常、複雑なデータベース操作を処理するために使用されます。これにより、データベースのセキュリティとパフォーマンスが向上すると同時に、アプリケーションのコード量も削減されます。 MySQL ストアド プロシージャは、アプリケーションのクエリや統計操作を容易にするために結果セットを返すこともできます。
MySQL ストアド プロシージャが結果セットを返すには、OUT パラメータを使用する方法とカーソルを使用する方法の 2 つがあります。以下では、これら 2 つの方法の使用法をそれぞれ説明します。
1. OUT パラメーターを使用して結果セットを返す
OUT パラメーターを使用してクエリ結果を 1 つ以上の変数に格納し、これらの変数をストアド プロシージャの出力パラメーターとして返します。このメソッドは、単一の値や少量のデータなど、より小さい結果セットを返すのに適しています。
以下は、OUT パラメータを使用してクエリ結果を返す例です。
CREATE PROCEDURE `get_total_orders`(OUT total INT) BEGIN SELECT COUNT(*) INTO total FROM orders; END;
上記のストアド プロシージャは、合計注文数を計算し、その結果を total という名前の OUT パラメータに格納するために使用されます。 。このストアド プロシージャを使用するサンプル コードは次のとおりです。
SET @total = 0; CALL get_total_orders(@total); SELECT @total as total_orders;
この例では、まず変数 @total を定義し、それに値 0 を割り当てます。次に、ストアド プロシージャ get_total_orders が呼び出され、結果が OUT パラメータ @total に保存されます。最後に、変数 @total の値をクエリし、結果を出力します。
2. カーソルを使用して結果セットを返す
カーソルは、結果セットの各行にランダムにアクセスするために使用できる結果セットへのポインターです。カーソルを使用して結果セットを返すことは、より大きな結果セットを返す場合、または複数のクエリと操作が必要な場合に適しています。
次は、カーソルを使用してクエリ結果を返す例です。
CREATE PROCEDURE `get_customer_orders`(IN customer_id INT) BEGIN DECLARE done INT DEFAULT FALSE; DECLARE order_id INT; DECLARE order_date DATE; DECLARE order_total DECIMAL(10,2); DECLARE cur CURSOR FOR SELECT id, order_date, total FROM orders WHERE customer_id = customer_id; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; OPEN cur; read_loop: LOOP FETCH cur INTO order_id, order_date, order_total; IF done THEN LEAVE read_loop; END IF; -- 处理每一行数据 END LOOP; CLOSE cur; END;
上記のストアド プロシージャは、指定された顧客のすべての注文をクエリし、クエリ結果をカーソルに保存するために使用されます。行データを処理する部分はコメントアウトされており、ビジネスニーズに応じてここで対応する操作を実行できます。このストアド プロシージャを使用するサンプル コードは次のとおりです。
CALL get_customer_orders(123);
この例では、ストアド プロシージャ get_customer_orders が呼び出され、顧客番号 123 が入力パラメータとして渡されます。ストアド プロシージャは顧客のすべての注文をクエリし、後続の操作のために結果をカーソルに保存します。
概要
MySQL ストアド プロシージャは、OUT パラメータとカーソルを介して結果セットを返すことができ、ビジネス ニーズに応じて適切な戻り方法を選択できます。ストアド プロシージャを使用すると、データベースのセキュリティとパフォーマンスが向上すると同時に、アプリケーション コードの量も削減されます。ストアド プロシージャを設計および使用するときは、最適なデータベース パフォーマンスとアプリケーション効率を達成するために、標準化された記述と適度な使用に注意を払う必要があります。
以上がmysql ストアド プロシージャはどのように結果セットを返すのか (2 つのメソッド)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。