2012-06-21 40 views
3

我想在MySQL存儲函數中使用goto。 我該如何使用? 示例代碼:如何在MySQL存儲函數中使用goto標籤

if (action = 'D') then 
    if (rowcount > 0) then 
     DELETE FROM datatable WHERE id = 2;  
    else 
     SET p=CONCAT('Can not delete',@b); 
     goto ret_label; 
    end if; 
end if; 

Label: ret_label; 
return 0; 

回答

5

有GOTO的情況下,不能在MySQL中實現,就像在代碼中向後跳(也是一件好事)。

但要跳出一切到最後的一系列語句像你的榜樣,你可以創建圍繞碼跳出的BEGIN/END塊:

aBlock:BEGIN 
    if (action = 'D') then 
     if (rowcount > 0) then 
      DELETE FROM datatable WHERE id = 2;  
     else 
      SET p=CONCAT('Can not delete',@b); 
      LEAVE aBlock; 
     end if; 
    end if; 
END aBlock; 
return 0; 

由於您的代碼只是一些嵌套的IF,在給定的代碼中構造是不必要的。但LOOP/WHILE/REPEAT更合理避免循環內的多個RETURN語句,併合並最終處理(有點像TRY/FINALLY)。