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

エラーメッセージをスローして実行を継続するMySQLハンドラーをストアドプロシージャに作成するにはどうすればよいですか?


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

mysql> DELIMITER //
mysql> Create Procedure Insert_Studentdetails(S_Studentid INT, S_StudentName Varchar(20), S_Address Varchar(20))
   -> BEGIN
   -> DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SELECT 'Got an error';
   -> 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.19 sec)

上記の手順を呼び出すと、「エラーが発生しました」というエラーメッセージがスローされ、「studentid」列に重複する値を入力しようとすると実行が続行されます。

mysql> Delimiter ;
mysql> CALL Insert_Studentdetails(100, 'Gaurav', 'Delhi');
+-----------+-------------+---------+
| Studentid | StudentName | address |
+-----------+-------------+---------+
| 100       | Gaurav      | Delhi   |
+-----------+-------------+---------+
1 row in set (0.11 sec)

Query OK, 0 rows affected (0.12 sec)

mysql> CALL Insert_Studentdetails(101, 'Raman', 'Shimla');
+-----------+-------------+---------+
| Studentid | StudentName | address |
+-----------+-------------+---------+
|       100 | Gaurav      | Delhi   |
|       101 | Raman       | Shimla  |
+-----------+-------------+---------+
2 rows in set (0.06 sec)

Query OK, 0 rows affected (0.12 sec)

mysql> CALL Insert_Studentdetails(101, 'Rahul', 'Jaipur');
+--------------+
| Got an error |
+--------------+
| Got an error |
+--------------+
1 row in set (0.03 sec)

+-----------+-------------+---------+
| Studentid | StudentName | address |
+-----------+-------------+---------+
|       100 | Gaurav      | Delhi   |
|       101 | Raman       | Shimla  |
+-----------+-------------+---------+
2 rows in set (0.04 sec)

Query OK, 0 rows affected (0.05 sec)

mysql> CALL Insert_Studentdetails(103, 'Rahul', 'Jaipur');
+-----------+-------------+---------+
| Studentid | StudentName | address |
+-----------+-------------+---------+
|      100  | Gaurav      | Delhi   |
|      101  | Raman       | Shimla  |
|      103  | Rahul       | Jaipur  |
+-----------+-------------+---------+
3 rows in set (0.08 sec)
Query OK, 0 rows affected (0.10 sec)

  1. テーブルの値を更新するMySQLストアド関数を作成するにはどうすればよいですか?

    私たちが知っているように、関数は結果を返したいときに最もよく使われます。したがって、値の挿入や更新などのテーブルを操作するためのストアド関数を作成する場合、それは多かれ少なかれストアドプロシージャのようになります。次の例では、「student_marks」という名前のテーブルの値を更新する「tbl_update」という名前のストアド関数を作成しています。 mysql> Select * from student_marks// +---------+------+---------+---------+---------+ | Name    | Math | Eng

  2. ストアドプロシージャで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