Мне нужна некоторая помощь в MySQL Хранимой процедуре ниже, Когда первая инструкция If else проходит, а вторая - ошибку, она показывает сообщение об ошибке, которое я вводил в инструкции ELSE, но я хотел бы отменить первый оператор If else if вторая ошибка. Как мне это сделать?
DELIMITER $$
CREATE PROCEDURE sp_Example()
BEGIN
SET @countOfTable = (select count(*) from Db1.tbl1);
IF @countOfTable > 0
THEN
INSERT INTO db1.tblLog
(
BatchStoreId,
Origin
)
SELECT
(SELECT DISTINCT SomeID FROM db1.tbl1) as SomeId,
(SELECT Origin FROM db1.tblKey WHERE Origin = 'ThisText') as Origin;
ELSE
SELECT 'table is empty!' as ErrorMessage;
End if;
SET @countOpp = (SELECT count(*) FROM db1.tbl2),
@MR = (SELECT DISTINCT SomeID FROM db1.tbl1),
@Opp = (SELECT DISTINCT OtherIDFROM db1.tbl2);
IF @countOpp > 0 and @MR = @Opp
THEN
INSERT INTO db1.tbllog
(
SomeID,
Origin
)
SELECT
(SELECT DISTINCT SomeID FROM db1.tbl2) as SomeID,
(SELECT Origin FROM db1.tblkey WHERE Origin = 'Secondary Text') as Origin;
ELSE
SELECT 'SomeID Do Not Match in tables db1.tbl1 and db1.tbl2' as ErrorMessage;
End if;
END;
Вы должны использовать START TRANSACTION;
а затем в инструкции else, используйте ROLLBACK
а затем, в конце вашей процедуры, выполните commit
. Я сделал простой пример того, как он должен выглядеть:
DELIMITER $$
CREATE PROCEDURE sp_example()
BEGIN
-- Starting the transaction
START TRANSACTION;
INSERT INTO 'test'.'owner' ('name') VALUES ('Insert Cubias');
IF 1 > 2 THEN
INSERT INTO 'test'.'owner' ('name') VALUES ('McCubo');
ELSE
SELECT 'Rollback transaction' as ErrorMessage;
-- No records will be inserted
ROLLBACK;
End if;
-- commit changes to database
COMMIT;
END;
$$
Для получения дополнительной информации вы можете ознакомиться с официальной документацией: https://dev.mysql.com/doc/refman/5.7/en/commit.html.
Ура!