У меня есть образец процедуры.
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.