ホームページ  >  記事  >  データベース  >  mysql ストアド プロシージャは複数の結果セットを返しますか?

mysql ストアド プロシージャは複数の結果セットを返しますか?

(*-*)浩
(*-*)浩オリジナル
2019-05-18 11:04:169982ブラウズ

今回はストアドプロシージャが複数の結果セットを返す場合の結果を紹介しますので、皆様の参考になれば幸いです。

mysql ストアド プロシージャは複数の結果セットを返しますか?

#mysql ストアド関数は値のみを返します。複数の値を返すストアド プロシージャを開発するには、INOUT パラメータまたは OUT パラメータを指定したストアド プロシージャを使用する必要があります。

まず、注文テーブルの構造を見てみましょう:

mysql> desc orders;
+----------------+-------------+------+-----+---------+-------+
| Field          | Type        | Null | Key | Default | Extra |
+----------------+-------------+------+-----+---------+-------+
| orderNumber    | int(11)     | NO   | PRI | NULL    |       |
| orderDate      | date        | NO   |     | NULL    |       |
| requiredDate   | date        | NO   |     | NULL    |       |
| shippedDate    | date        | YES  |     | NULL    |       |
| status         | varchar(15) | NO   |     | NULL    |       |
| comments       | text        | YES  |     | NULL    |       |
| customerNumber | int(11)     | NO   | MUL | NULL    |       |
+----------------+-------------+------+-----+---------+-------+
7 rows in set

次に、顧客番号を受け取り、出荷済み (出荷済み) とキャンセル済み (キャンセル済み) を返すストアド プロシージャを見てみましょう。解決済み (解決済み) および係争中 (係争中) の注文の合計数 (複数の結果セット):

DELIMITER $$
 
CREATE PROCEDURE get_order_by_cust(
 IN cust_no INT,
 OUT shipped INT,
 OUT canceled INT,
 OUT resolved INT,
 OUT disputed INT)
BEGIN
 -- shipped
 SELECT
            count(*) INTO shipped
        FROM
            orders
        WHERE
            customerNumber = cust_no
                AND status = 'Shipped';
 
 -- canceled
 SELECT
            count(*) INTO canceled
        FROM
            orders
        WHERE
            customerNumber = cust_no
                AND status = 'Canceled';
 
 -- resolved
 SELECT
            count(*) INTO resolved
        FROM
            orders
        WHERE
            customerNumber = cust_no
                AND status = 'Resolved';
 
 -- disputed
 SELECT
            count(*) INTO disputed
        FROM
            orders
        WHERE
            customerNumber = cust_no
                AND status = 'Disputed';
 
END

実際、ストアド プロシージャには、IN パラメーターに加えて、4 つの追加の OUT パラメーター (発送済み、キャンセル済み) も必要です。 、解決され、争われました。ストアド プロシージャでは、count 関数を指定した select ステートメントを使用して、注文ステータスに基づいて対応する注文合計を取得し、それを対応するパラメーターに割り当てます。上記の SQL によれば、get_order_by_cust ストアド プロシージャを使用する場合は、顧客番号と 4 つのユーザー定義変数を渡して出力値を取得できます。ストアド プロシージャを実行した後、SELECT ステートメントを使用して変数値を出力します:

+----------+-----------+-----------+-----------+
| @shipped | @canceled | @resolved | @disputed |
+----------+-----------+-----------+-----------+
|       22 |         0 |         1 |         1 |
+----------+-----------+-----------+-----------+
1 row in set

以上がmysql ストアド プロシージャは複数の結果セットを返しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。