【发布时间】:2017-04-17 14:03:49
【问题描述】:
USE COLLEGE;
DROP PROCEDURE IF EXISTS Fix_Egghead1;
DELIMITER $$
CREATE PROCEDURE Fix_Egghead1()
BEGIN
-- Setup error handing
DECLARE errorOccurred INT DEFAULT FALSE;
DECLARE errorMessage VARCHAR(255);
-- Called when an error occurs
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
BEGIN
SET errorOccurred = TRUE;
GET DIAGNOSTICS CONDITION 1
errorMessage = MESSAGE_TEXT;
END ;
START TRANSACTION;
DELETE FROM Student
WHERE Student.ID= 57;
INSERT INTO Faculty(LastName, FirstName, Email, HireDate, Salary, DepartmentID)
VALUES('Egghead', 'Eduardo', 'EduardoEgghead@College.edu', 115000, 1);
IF errorOccurred = TRUE THEN
ROLLBACK;
SELECT CONCAT( 'The faculty member wasn't succesfully added to the Faculty table:' , errorMessage) AS Results;
ELSE
COMMIT;
SELECT 'The faculty member was successfully added to the Faculty table.';
END IF;
END
$$
DELIMITER ;
CALL Fix_Egghead1();
大家好,
我正在创建一个事务回滚,我在其中创建了一个存储过程,该过程可以输出教员是否成功添加到教员表中,但问题是我的代码没有打印出需要打印的错误消息。我知道这不是一次成功的交易,因为教员 Eduardo Egghead 作为学生仍然有注册记录。我怎么解决这个问题?但是,我确实想出了一个解决方案,解决方案是摆脱 CONCAT 函数,只需使用 SELECT 语句写入错误消息,就像我在提交部分所做的那样。还有其他建议吗?
【问题讨论】:
-
它甚至可以与那些错位的引号一起编译吗?
-
wasn't必须是wasn\'t -
@mustaccio 是的,确实如此。那不是我的问题。请再次阅读说明。你觉得你能帮上忙吗?
-
@Sloan Thrasher 你能帮忙吗?
-
@Jemshit Iskenderov 你能帮忙吗?
标签: mysql transactions rollback