【问题标题】:Why doesn’t my transaction inside of a stored procedure print the error message I want?为什么存储过程中的事务不打印我想要的错误消息?
【发布时间】: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


【解决方案1】:

从 cmets 移出:

我猜如果问题不是未转义的引号,那么CONCAT() 正在尝试连接NULLCONCAT 的行为是返回 NULL,如果它的任何输入是 NULL。我建议使用CONCAT_WS() 或将变量包装在IFNULL() 中:

SELECT CONCAT_WS(' ', "The faculty member wasn't succesfully added to the Faculty table:", errorMessage) AS Results;
-- or --
SELECT CONCAT("The faculty member wasn't succesfully added to the Faculty table: ", IFNULL(errorMessage,'NULL')) AS Results;

【讨论】:

    猜你喜欢
    • 2014-05-08
    • 1970-01-01
    • 2021-08-15
    • 2019-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-27
    • 2020-05-01
    相关资源
    最近更新 更多