この記事では、例を使用して、MySQL がストアド プロシージャで引き起こすエラー状態 (SIGNAL および RESIGNAL ステートメント) を説明します。ご参考までに、詳細は以下の通りです。 mysql では、SIGNAL および RESIGNAL ステートメントを使用して、ストアド プロシージャでエラー状態を発生させることができます。 まずSIGNALステートメントを見てみましょう。通常、SIGNAL ステートメントは、ストアド プロシージャ、ストアド関数、トリガー、イベントなどのストアド プログラムで呼び出し元にエラーまたは警告状態を返すために使用します。 SIGNAL ステートメントは、返される情報 (値やメッセージ SQLSTATE など) を制御します。文法構造を見てみましょう: SIGNAL SQLSTATE | 条件名; SET 条件情報項目名1 = 値1、 condition_information_item_name_1 = value_2 など; SIGNAL キーワードは、DECLARE CONDITION ステートメントによって宣言された SQLSTATE 値または条件名です。ただし、SIGNAL ステートメントでは、常に SQLSTATE 値または SQLSTATE 値を使用して定義された名前付き条件を指定する必要があることに注意してください。呼び出し元に情報を提供する場合は、SET 句を使用する必要があります。値を使用して複数の条件情報項目名を返す場合は、それぞれの名前と値のペアをコンマで区切る必要があります。上記の SQL では、condition_information_item_name には MESSAGE_TEXT、MYSQL_ERRORNO、CURSOR_NAME などを指定できます。既存の販売注文に注文明細項目を追加し、注文番号が存在しない場合はエラー メッセージを発行するストアド プロシージャを見てみましょう。 区切り文字 $$ CREATE PROCEDURE AddOrderItem(in orderNo int, productCode varchar(45)では、 数量はint、価格はdouble、行番号はint) 始める C INT を宣言します。 COUNT(注文番号)をCに入力する 注文から ここで、orderNumber = orderNo; -- orderNumber が存在するかどうかを確認します IF(C != 1) ならば シグナルSQLSTATE '45000' SET MESSAGE_TEXT = '注文テーブルに注文番号が見つかりません'; 終了の場合; -- 下記にさらにコードがあります -- ... 終了 $$ 区切り文字 ; 最初に、ストアド プロシージャに渡された入力注文番号を使用して注文をカウントし、注文数が 1 でない場合は、注文番号が orders テーブルに存在しないというエラー メッセージとともに SQLSTATE 45000 エラーが発生します。ここで、45000 は、未処理のユーザー定義例外を示すために使用される一般的な SQLSTATE 値です。 ストアド プロシージャ AddOrderItem() を呼び出しますが、存在しない注文番号を渡すと、エラー メッセージが表示されます。 AddOrderItem(10,'S10_1678',1,95.7,1)を呼び出します。 上記のコードを実行すると、次の結果が得られます。 mysql> AddOrderItem を呼び出します (10,'S10_1678',1,95.7,1); 1644 - 注文表に注文番号が見つかりません マイSQL> RESIGNAL ステートメントをもう一度見てみましょう。機能と構文は SIGNAL ステートメントに似ていますが、次の違いがあります。
RESIGNAL ステートメントを単独で使用する場合、すべての属性は条件ハンドラーに渡される属性と同じになります。呼び出し元に送信される前にエラー メッセージを変更するストアド プロシージャを見てみましょう。 区切り文字 $$ CREATE PROCEDURE Divide(IN 分子 INT、IN 分母 INT、OUT 結果 double) 始める SQLSTATE '22012' の division_by_zero 条件を宣言します。 division_by_zero の継続ハンドラを宣言する RESIGNAL SET MESSAGE_TEXT = 'ゼロ除算 / 分母はゼロにできません'; -- 分母が0の場合 シグナルdividion_by_zero; それ以外 SET 結果 := 分子 / 分母; 終了の場合; 終了 $$ 区切り文字 ; 次に、次のように呼び出してみましょう。 mysql> 呼び出し Divide(10,0,@result); 1644 - ゼロ除算 / 分母はゼロにできません さて、この記録はここで終わります。これで何か得られたものはあったでしょうか。 MySQL 関連のコンテンツに興味のある読者は、このサイトの次のトピックをチェックしてください: 「MySQL ストアド プロシージャ スキル」、「MySQL 共通関数の概要」、「MySQL ログ操作スキル」、「MySQL トランザクション操作スキルの概要」、および「MySQL データベース ロック関連スキルの概要」 この記事が皆様のMySQLデータベース設計に役立つことを願っています。 以下もご興味があるかもしれません:
|
<<: SpringBoot のパッケージ化と Docker へのアップロード、およびマルチインスタンス デプロイメントの実装に関する簡単な分析 (IDEA バージョン)
エラーの説明: 1. Linux (CentOS 7 64) システムに Nginx (1.18.0...
1 はじめに「DockerでPostgreSQLを起動する方法といくつかの接続ツールのおすすめ」の記...
g++ を使用して初めて cpp ファイルをコンパイルしたとき、未定義の参照エラーが報告されました。...
1. 公式MySQL Yumリポジトリをダウンロードしてインストールする 実行ファイル: mysql...
以下の質問はすべて InnoDB ストレージ エンジンに基づいています。 1. 最も大きな ID を...
目次1. 糖衣構文とは何ですか? 2. VUE の構文糖とは何ですか? 1. 最も一般的な構文シュガ...
目次1. DIVとSPANの違いと特徴2. スパンタグの概要3. 拡大と改善4. 凡例の効果の実証例...
デモを作成するときにこのプラグインを使用していくつか問題が発生したため、プラグインの使用方法といくつ...
1. tomcat とは誰ですか? 2. Tomcat は何ができますか? Tomcat は Web...
目次インデックスモデルB+ツリーインデックスの選択インデックスの最適化インデックスの選択性カバーイン...
序文こういう特殊効果ってよく見かけますよね。すごくかっこいいですよね。 これは、Google Mat...
序文ES6 で初めて導入された「構造化代入構文」を使用すると、配列やオブジェクトの値を異なる変数に挿...
この記事では、Centos7.4 環境に lamp-php7.0 をインストールする方法について説明...
絶対位置決め方式: (1)親要素を相対配置に設定します。親要素の高さを指定しない場合は、左の子要素の...
目次ブール型数値型文字列型文字列と数値を連結する未定義およびnull配列型タプル型列挙型あらゆるタイ...