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

変数の特定の値を設定して実行を継続するMySQLハンドラーをストアドプロシージャにどのように記述できますか?


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

mysql> DELIMITER //
mysql> Create Procedure Insert_Studentdetails2(S_Studentid INT, S_StudentName Varchar(20), S_Address Varchar(20),OUT got_error INT)
    -> BEGIN
    -> DECLARE CONTINUE HANDLER FOR SQLEXCEPTION 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)
mysql> Delimiter ;

mysql> CALL Insert_Studentdetails2(104,'Ram',‘Chandigarh',@got_error);
+-----------+-------------+------------+
| Studentid | StudentName | address    |
+-----------+-------------+------------+
| 100       | Gaurav      | Delhi      |
| 101       | Raman       | Shimla     |
| 103       | Rahul       | Jaipur     |
| 104       | Ram         | Chandigarh |
+-----------+-------------+------------+
4 rows in set (0.04 sec)
Query OK, 0 rows affected (0.06 sec)

ここで、列'studentid'の重複する値を追加しようとすると、実行が続行され、プロシージャ' select * from student_detail'で記述されたクエリの結果セットが得られ、got_error変数の値が1に設定されます。 。

mysql> CALL Insert_Studentdetails2(104,'Shyam','Hisar',@got_error);
+-----------+-------------+------------+
| Studentid | StudentName | address    |
+-----------+-------------+------------+
| 100       | Gaurav      | Delhi      |
| 101       | Raman       | Shimla     |
| 103       | Rahul       | Jaipur     |
| 104       | Ram         | Chandigarh |
+-----------+-------------+------------+
4 rows in set (0.00 sec)
Query OK, 0 rows affected (0.03 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 DemoTable    (    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,    Value int    ); Query OK, 0 rows affected (0.63 sec) 挿入コマンド-を使用して、テーブルにいくつかのレコードを挿入します mysql> insert into DemoTabl