Как реализовать транзакцию отката и сообщение об ошибке в MYSQL - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть образец процедуры.

CREATE PROCEDURE `sample_procedure ` 
(
IN IDIn bigint(20),
IN MainIDIn bigint(20),
IN NameIn  varchar(20)
)
 READS SQL DATA
    DETERMINISTIC
BEGIN
INSERT INTO tbl_DEPT
(
ID,
Name)
Select 1,'Mohan';

IF NOT EXISTS (SELECT ID FROM tbl_emp  te  WHERE te.ID = IDIn) THEN 
INSERT INTO tbl_emp
(
MainID,
Name) 
VALUES (MainIDIn,
        NameIn);
ELSE 
IF  EXISTS (SELECT ID FROM tbl_emp  te  WHERE te.ID = IDIn) THEN 
  UPDATE tbl_emp  
  set
    MainID =MainIDIn,
    name = NameIn
  WHERE te.ID= IDIn;
  END IF;
  END IF;
END

Вызовите sample_procedure (1,2, Sampl123)

Я просто отправляю некоторые не относящиеся к делу Данные в Процедуру, чтобы процедура не сработала. Но то, как нам нужно реализовать откат, означает, что он должен прийти в исходное состояние без вставки записей также в tbl_DEPT.

IN T- SQL у нас будет

BEGIN
    SET NOCOUNT ON
    BEGIN TRANSACTION
    BEGIN TRY
        SET @OUT = "success";
        COMMIT TRANSACTION
    END TRY

    BEGIN CATCH
        set @out = 'not success';
        ROLLBACK TRANSACTION
    END CATCH
END

этот тип блоков TRY CATCH и для захвата Error

 "ERROR_NUMBER() AS ErrorNumber,
    ERROR_SEVERITY() AS ErrorSeverity"

Таким же образом в MYSQL Я ищу механизм TRY CATCH и ROLL BACK.

ЕСЛИ Процедура завершается неудачно, она ДОЛЖНА ОТКРЫТЬСЯ и не загружаться ни в одну из таблиц.

Может ли кто-нибудь предложить мне в MYSQL.

1 Ответ

0 голосов
/ 28 апреля 2020

Mysql не использует try / catch. Если используются обработчики, например обработчик EXIT, который прервет выполнение SP:

DECLARE EXIT HANDLER FOR SQLEXCEPTION 
BEGIN 
    ROLLBACK;
    -- other logic
END;

Также существуют обработчики другого типа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...