2011-05-16 66 views
1

我的MySQL的過程是這樣的:我叫這個過程MySQL EXIT HANDLER沒有捕捉到所有的錯誤?

create procedure create_feed (_id int) 
begin 
    declare exit handler for sqlexception 
    begin 
     rollback; 
     select false; 
    end; 

    start transaction; 

    insert into t1(id) 
    values (_id); 

    insert into wrong_table_name (id, createdtime) 
    values (
     _id, 
     CURRENT_TIMESTAMP 
    ); 

    commit; 
    select true; 
end// 

後,t1表進行更新,並在值「真」返回。 wrong_table_name完全不存在。爲什麼?

+0

你使用的是什麼版本的MySQL?你在t1上使用什麼存儲引擎? – 2011-05-16 20:20:12

+0

它是5.1 ??,不記得最後的數字。我正在使用存儲引擎的默認值。 – davidshen84 2011-05-16 23:41:44

回答

0

如果您希望它返回一個值,我建議您使用函數而不是過程。另一個選擇是如果您希望程序返回一個或多個值,則使用輸出參數。

儘管如此,我很驚訝你的結果。如果wrong_table_name不存在,那麼該proc應該返回true。至於t1正在更新,如果您使用的是像MyISAM這樣的非事務性存儲引擎,會忽略回滾。

我在MySQL 5.5.8中測試了你的代碼,它對我來說工作正常。即,當wrong_table_name不存在時,它總是進入退出處理程序。