MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

デフォルトのMySQLエラーにSQLSTATEを使用して実行を終了するMySQLハンドラーをストアドプロシージャにどのように記述できますか?


MySQLストアドプロシージャで例外が発生した場合は常に、適切なエラーメッセージをスローして処理することが非常に重要です。例外を処理しないと、ストアドプロシージャでその特定の例外を使用してアプリケーションが失敗する可能性があるためです。 。 MySQLは、デフォルトのMySQLエラーにSQLSTATEを使用し、実行を終了するハンドラーを提供します。これを示すために、次の例を使用して、主キー列に重複する値を挿入しようとしています。

mysql> Delimiter //
mysql> Create Procedure Insert_Studentdetails4(S_Studentid INT, S_StudentName Varchar(20), S_Address Varchar(20),OUT got_error INT)
   -> BEGIN
   -> DECLARE EXIT HANDLER FOR 1062 SET got_error=1;
   -> INSERT INTO Student_detail
   -> (Studentid, StudentName, Address)
   -> Values(S_Studentid,S_StudentName,S_Address);
   -> Select * from Student_detail;
   -> END //
Query OK, 0 rows affected (0.00 sec)

ここで、列'studentid'の重複する値を追加しようとすると、実行が終了し、プロシージャ' select * from student_detail'で記述されたクエリの結果セットが表示されず、デフォルトのMySQLエラーメッセージのみが表示されます1062重複する値の入力に関して、また変数got_errorの値を1に設定します。

mysql> Delimiter ;
mysql> CALL Insert_Studentdetails4(104,'Ram','Chandigarh',@got_error);

Query OK, 0 rows affected (0.00 sec)

mysql> Select @got_error;
+------------+
| @got_error |
+------------+
|          1 |
+------------+
1 row in set (0.00 sec)

  1. ストアドプロシージャでIFを使用し、MySQLで選択する方法は?

    ストアドプロシージャでIFを使用し、selectステートメントでIF()を使用することもできます。 selectステートメントのIF() IF() in select statement mysql> select if(0=0,'Hello MySQL','condition is wrong'); これにより、次の出力が生成されます- +------------------------------------------------------+ | if('test'='test','Hello MySQL

  2. MySQLストアドプロシージャで区切り文字を正しく使用して値を挿入するにはどうすればよいですか?

    まずテーブルを作成しましょう- mysql> create table DemoTable2028    -> (    -> StudentFirstName varchar(20),    -> StudentLastName varchar(20)    -> ); Query OK, 0 rows affected (0.87 sec) これは、ストアドプロシージャを作成し、値を挿入するためのクエリです(区切り文字を正しく使用して)- mysql> delimiter