この記事では、例を使用して、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. 概念分析 1: UE ユーザー エクスペリエンス <br />英語ではユーザー エ...
Linux のufw (Uncomplicated Firewall) を見て、ファイアウォールに変...
VMware Toolsをインストールすると、仮想マシンホスト間で①テキストをコピーして貼り付けるこ...
console.log( [] == ![] ) // 真 console.log( {} == ...
プロジェクトシナリオ:ページ表示には <ul> タグがあります。リストデータを動的に表示...
目次01 コンテナの本質とは何か? 02 Cgroupテクノロジーと名前空間テクノロジーの概要03 ...
バックエンド管理システムで作業している場合、通常、メニュー権限制御に関連する問題に遭遇します。もちろ...
目次1. 基本的な例2. インスタンスプロトタイプのスコープを設定する3. グローバル変数の登録と使...
この記事では、デジタル時計効果を実現するためのJavaScriptの具体的なコードを参考までに紹介し...
この記事では、お絵かきボード/サインボード機能を実現するためのJSキャンバスの具体的なコードを参考ま...
テキストシャドウテキストに影を追加します。テキストとテキスト装飾に複数のシャドウを追加することができ...
目次序文1. 従来のVueコンポーネント1. メインコンポーネントコード: 2. 使用方法3. 成果...
要件は、製品の評価データを渡すことであり、ページには対応する星の数が表示されます。 1. 異なる評価...
目次SSL証明書の作成1. 秘密鍵を生成する2. 証明書要求ファイルを生成する3. CRT証明書ファ...
Truncate table ステートメントは、テーブル内のすべてのデータを削除/切り捨てるために使...