MySQL儲存過程 handler用法

2021-09-26 22:34:23 字數 2170 閱讀 8498

參考官方手冊:

declare handler_action handler

for condition_value [, condition_value] ...

statement

handler_action:

condition_value:

官方手冊sqlstate與error code參考: 

continue: 傳送錯誤時繼續執行後續**

exit: 發生錯誤時退出當前**塊(可能是子**塊或者main**塊)

直接看例子

mysql> create table d.handlerdemo1 (s1 int, primary key (s1));

query ok, 0 rows affected (0.00 sec)

mysql> delimiter //

mysql> create procedure handlerdemo ()

begin

declare continue handler for sqlstate '23000' set @y = 1;

truncate table d.handlerdemo1;

set @x = 1;

insert into d.handlerdemo1 values (1);

set @x = 2;

insert into d.handlerdemo1 values (1);

set @x = 3;

end;

//query ok, 0 rows affected (0.00 sec)

mysql> call handlerdemo()//

query ok, 0 rows affected (0.00 sec)

mysql> select @x//

+------+

| @x |

+------+

| 3 |

+------+

1 row in set (0.00 sec)

注意@x是3在過程執行之後,這表明執行繼續該過程的結束發生錯誤之後。如果該 declare ... handler語句不存在,mysql會因為約束而exit在第二次insert失敗後採取預設的action()primary key,並且 select @x會返回 2。

mysql> show create procedure handlerdemo1\g

*************************** 1. row ***************************

procedure: handlerdemo1

sql_mode: strict_trans_tables,no_engine_substitution

create procedure: create definer=`root`@`localhost` procedure `handlerdemo1`()

begin

declare exit handler for sqlstate '23000'set @y = 1;

truncate table d.handlerdemo1;

set @x = 1;

insert into d.handlerdemo1 values (1);

set @x = 2;

insert into d.handlerdemo1 values (1);

set @x = 3;

endcharacter_set_client: utf8mb4

collation_connection: utf8mb4_0900_ai_ci

database collation: latin1_swedish_ci

1 row in set (0.00 sec)

mysql> call handlerdemo1();

query ok, 0 rows affected (0.26 sec)

mysql> select @x;

+------+

| @x |

+------+

| 2 |

+------+

1 row in set (0.00 sec)

select @x 的確返回 2 。

mysql儲存過程 MySQL儲存過程

在本節中,您將逐步學習如何在mysql中編寫和開發儲存過程。首先,我們向您介紹儲存過程的概念,並討論何時使用它。然後,展示如何使用過程 的基本元素,如建立儲存過程的語句,if else,case,loop,儲存過程的引數。下面每個教程都包含了易於理解的示例和詳細的說明。如果您瀏覽並學習所有教程,您可...

mysql 儲存過程 mysql 儲存過程

建立 為建立儲存過程的結束標誌,使用delimiter 可更改標誌 格式create procedure begin sqlend create procedure myprocedure in param integer begin select from tb role where tb rol...

mysql 儲存過程 MySQL儲存過程

目錄 儲存過程 簡介是一組為了完成特定功能的sql語句集合 比傳統sql速度更快 執行效率更高 儲存過程的優點 執行一次後,會將生成的二進位制 駐留緩衝區,提高執行效率 sql語句加上控制語句的集合,靈活性高 在伺服器端儲存,客戶端呼叫時,降低網路負載 可多次重複被呼叫,可隨時修改,不影響客戶端呼叫...