この記事では、例を使用して、MySQL ストアド プロシージャで複数の値を返す方法について説明します。ご参考までに、詳細は以下の通りです。 MySQL ストアド関数は 1 つの値のみを返します。複数の値を返すストアド プロシージャを開発するには、INOUT または OUT パラメータを持つストアド プロシージャを使用する必要があります。まず、注文テーブルの構造を見てみましょう。 mysql> desc 注文; +----------------+-------------+------+------+--------+-------+ | フィールド | タイプ | Null | キー | デフォルト | 追加 | +----------------+-------------+------+------+--------+-------+ | 注文番号 | int(11) | NO | PRI | NULL | | | orderDate | 日付 | NO | | NULL | | | requiredDate | 日付 | NO | | NULL | | | 出荷日 | 日付 | はい | | NULL | | | ステータス | varchar(15) | NO | | NULL | | | コメント | テキスト | はい | | NULL | | | 顧客番号 | int(11) | NO | MUL | NULL | | +----------------+-------------+------+------+--------+-------+ 7行セット 次に、顧客番号を受け取り、出荷済み、キャンセル済み、解決済み、および異議申し立て済みの注文の合計数を返すストアド プロシージャを見てみましょう。 区切り文字 $$ プロシージャ get_order_by_cust( を作成する IN cust_no INT、 OUT発送済みINT、 OUTキャンセルINT、 OUTはINTを解決しました。 OUT 論争 INT) 始める -- 発送済み 選択 count(*) 出荷済み から 注文 どこ 顧客番号 = cust_no AND ステータス = '発送済み'; -- キャンセル 選択 count(*) INTO キャンセル から 注文 どこ 顧客番号 = cust_no AND ステータス = 'キャンセル'; -- 解決済み 選択 count(*) INTO 解決済み から 注文 どこ 顧客番号 = cust_no AND ステータス = '解決済み'; -- 議論の余地あり 選択 count(*) INTO 議論中 から 注文 どこ 顧客番号 = cust_no AND ステータス = '異議あり'; 終わり 実際、ストアド プロシージャには、IN パラメータに加えて、shipped、cancelled、resolved、disputed の 4 つの追加 OUT パラメータも必要です。 ストアド プロシージャでは、count 関数を含む select ステートメントを使用して、注文ステータスに基づいて対応する注文の合計数を取得し、対応するパラメーターに割り当てます。上記の SQL によると、get_order_by_cust ストアド プロシージャを使用する場合、顧客番号と 4 つのユーザー定義変数を渡して出力値を取得できます。ストアド プロシージャを実行した後、SELECT ステートメントを使用して変数値を出力します。 +----------+------------+-----------+-----------+ | @発送済み | @キャンセル済み | @解決済み | @争議中 | +----------+------------+-----------+-----------+ | 22 | 0 | 1 | 1 | +----------+------------+-----------+-----------+ セット内の1行 実際のアプリケーションと組み合わせて、PHP プログラムから複数の値を返すストアド プロシージャを呼び出す方法を見てみましょう。 <?php /** * 複数の値を返すストアドプロシージャを呼び出す * @param $顧客番号 */ 関数 call_sp($customerNumber) { 試す { $pdo = 新しい PDO ("mysql:host=localhost;dbname=yiibaidb", 'root', '123456'); // ストアドプロシージャを実行する $sql = 'get_order_by_cust(:no,@shipped,@canceled,@resolved,@disputed) を呼び出します'; $stmt = $pdo->prepare($sql); $stmt->bindParam(':no', $customerNumber, PDO::PARAM_INT); $stmt->execute(); $stmt->カーソルを閉じる(); // 2番目のクエリを実行してOUTパラメータから値を取得します $r = $pdo->query("SELECT @shipped,@canceled,@resolved,@disputed") -> フェッチ(PDO::FETCH_ASSOC); もし($r){ printf('発送済み: %d、キャンセル済み: %d、解決済み: %d、異議申し立て済み: %d', $r['@発送済み'], $r['@キャンセル'], $r['@解決済み'], $r['@disputed']); } } (PDOException $pe) をキャッチします { die("エラーが発生しました:" . $pe->getMessage()); } } コール_sp(141); 上記のコードでは、@ 記号の前のユーザー定義変数はデータベース接続に関連付けられているため、呼び出し間でアクセスできます。 さて、今回の共有はこれですべてです。 MySQL 関連のコンテンツに興味のある読者は、このサイトの次のトピックをチェックしてください: 「MySQL ストアド プロシージャ スキル」、「MySQL 共通関数の概要」、「MySQL ログ操作スキル」、「MySQL トランザクション操作スキルの概要」、および「MySQL データベース ロック関連スキルの概要」 この記事が皆様のMySQLデータベース設計に役立つことを願っています。 以下もご興味があるかもしれません:
|
この効果は、2つのブラウザが互いにシミュレートしていることを示しています 1. シミュレートされたノ...
序文個人の実際の開発で使用した効果問題を、今後の開発やレビューに役立てるためにまとめています。他の人...
Linuxシステムをお持ちでない場合は、ダウンロードとインストールについてはhttps://www....
目次1. はじめに1.1 Babel トランスコーダ1.2 ポリフィル2. let と const ...
脆弱性の説明Apache Flink は、分散ストリームおよびバッチ データ処理用のオープン ソース...
目次1.重複排除を設定する2. 重複を削除するには、2 回の for ループを使用します。 3. i...
今日、MySQL データベースをコンピューターに再度インストールしました。システムを再インストールす...
この記事では、例を使用して、MySQL クエリ条件の一般的な使用方法を説明します。ご参考までに、詳細...
今日は断片化された画像の読み込み効果を実装します。効果は次のとおりです。 これを 3 つのステップで...
目次レイアウト部分: <div id="アプリ"> <p>...
1. dockerでtomcat8をインストールする1. Docker HubでTomcatイメージ...
CentOS6.7にmysql5.7.18をインストールする 1. /usr/localディレクトリ...
目次序文文章パラメータ例Lodash 実装:トーキー機能: castPath関数: stringTo...
目次1. コンセプト1.1 エラーと例外とは何ですか? 1.2 異常の分類2. 例外処理2.1try...
最近、クライアントのために印刷していたとき、ページのヘッダーを印刷するのではなく、表の内容だけを印刷...