今回はストアドプロシージャが複数の結果セットを返す場合の結果を紹介しますので、皆様の参考になれば幸いです。
#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 サイトの他の関連記事を参照してください。