Documentation Home

13.6.7.9 条件处理限制

SIGNAL, RESIGNAL, 和 GET DIAGNOSTICS不允许作为准备好的语句。例如,这个语句是无效的:

PREPARE stmt1 FROM 'SIGNAL SQLSTATE "02000"';

SQLSTATE'04'中的值没有特殊处理。它们的处理方式与其他异常相同。

标准 SQL 有一个诊断区域堆栈,包含每个嵌套执行上下文的诊断区域。标准 SQL 语法包括GET STACKED DIAGNOSTICS用于引用堆叠区域。MySQL 不支持该 STACKED关键字,因为只有一个诊断区域包含来自最近写入它的语句的信息。另见 第 13.6.7.7 节,“MySQL 诊断区”

在标准 SQL 中,第一个条件与 SQLSTATE为前一个 SQL 语句返回的值有关。在 MySQL 中,这是不能保证的,所以要得到主要错误,你不能这样做:

GET DIAGNOSTICS CONDITION 1 @errno = MYSQL_ERRNO;

相反,这样做:

GET DIAGNOSTICS @cno = NUMBER;
GET DIAGNOSTICS CONDITION @cno @errno = MYSQL_ERRNO;