mySQL 存储过程没有给我错误消息

标签 mysql

以下存储过程按预期工作,但如果我强制发生错误(请参阅 INSERT 语句中的故意 type-o),我不会收到任何错误信息。

我创建了一个名为 error_check 的表,并尝试在其中插入错误信息以查看是否可以获得更多信息,但是当出现错误时,不会向表中添加任何行。 (当我取出 type-o 时,正如预期的那样,我得到了一个包含空值的新行。)

这曾经有效,所以我确信这是我错误添加的。

CREATE DEFINER=`root`@`localhost` PROCEDURE `addClassToMasterList`( IN begin_date VARCHAR(10), IN day_num INT,
                               IN startTime VARCHAR(10), IN endTime VARCHAR (20), IN loc_id INT, IN studio VARCHAR(20),
                               IN class_name VARCHAR(45), IN owner_id INT,
                               IN club_id INT, OUT return_id VARCHAR(250))
BEGIN

DECLARE EXIT HANDLER FOR SQLEXCEPTION, NOT FOUND, SQLWARNING
BEGIN
    ROLLBACK;  
    GET DIAGNOSTICS CONDITION 1 @sqlstate = RETURNED_SQLSTATE, 
                                @errno = MYSQL_ERRNO, 
                                @text = MESSAGE_TEXT;
    SET @display_error = CONCAT("ERROR ", @errno, " (", @sqlstate, "): ", @text);
END;   /*end of exception handing*/

SET @formatted_date = STR_TO_DATE(begin_date, '%m/%d/%Y');

/* Save all data as a new row in the Master Schedule */
INSERT INTO master_class_list_typeo_here
VALUES (null, 
    day_num, 
    @formatted_date, 
    null,
    startTime, 
    endTime, 
    loc_id, 
    studio,
    class_name, 
    owner_id, 
    club_id); 

SELECT LAST_INSERT_ID() INTO @new_id;

/* Put bits of error into a table so I can see what is going on. */
INSERT INTO error_check
VALUES (null, @display_error, @text, @errno);

/* If an error message was generated, return the error.
   Otherwise, return the new id that was automatically created. */
SELECT IF (@display_error, @display_error, @new_id) INTO return_id;
/* Also tried:  SELECT @display_error INTO return_id;  */

END

最佳答案

尝试:

...
GET STACKED DIAGNOSTICS CONDITION 1
...

13.6.7.3 GET DIAGNOSTICS Syntax

...

The keyword STACKED means to retrieve information from the second diagnostics area, which is available only if the current context is a condition handler.

...

参见db-fiddle .

关于mySQL 存储过程没有给我错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46791969/

相关文章:

mysql - 这张 table 应该一分为二吗?

PHP MYSql : UPDATE Multi Row With One id

mysqldump 提示密码,即使凭据保存在/home/user/.my.cnf

php - MySQL:连接两个表/如果表A中的特定字段不为空,则从表B中的特定行读取所有数据

python - 值错误: unsupported format character 'P' (0x50) at index 798

php - 根据 ID 列表与 Eloquent 进行连接

mysql - 如何忽略条件结果并在sql server中选择保留结果

c# - 从*新* ComboBox 文本更新,而不是旧文本

php - 滚动平均效率,php mysql

mysql in/=any 带有子查询的运算符的奇怪行为