Try/Catch and @@TRANCOUNT in MySQL
Всем привет, подскажите плиз, какая есть альтернатива блока CATCH в MySQL
BEGIN TRANSACTION
BEGIN TRY
некоторые действия с инсертами
END TRY
BEGIN CATCH
SELECT ERROR_NUMBER() AS ErrorNumber,
ERROR_SEVERITY() AS ErrorSeverity,
ERROR_STATE() AS ErrorState,
ERROR_PROCEDURE() AS ErrorProcedure,
ERROR_LINE() AS ErrorLine,
ERROR_MESSAGE() AS ErrorMessage ;
IF @@TRANCOUNT > 0
BEGIN
ROLLBACK TRANSACTION ;
UPDATE TABLE ...
END
END CATCH
IF @@TRANCOUNT > 0
COMMIT TRANSACTION
Я делал следующим образом, возможно нужно что-то изменить/добавить
DECLARE EXIT HANDLER FOR SQLWARNING, SQLEXCEPTION, NOT FOUND
BEGIN
SET @error_severity := 0;
SET @error_line := 0;
GET STACKED DIAGNOSTICS CONDITION 1 @error_state = RETURNED_SQLSTATE,
@error_number = MYSQL_ERRNO,
@error_message = MESSAGE_TEXT;
SELECT
@error_number AS ErrorNumber,
@error_severity AS ErrorSeverity,
@error_state AS ErrorState,
@error_line AS ErrorLine,
@error_message AS ErrorMessage;
ROLLBACK;
UPDATE TABLE ...
END;