MySQL - GET DIAGNOSTICS 语句



诊断区域保存有关发生的错误以及生成这些错误的语句的信息。

此区域包含两种信息:

  • 语句信息 - 例如,语句影响的行数。

  • 条件信息 - 例如,执行语句时发生的错误的错误代码及其错误消息。

    在执行特定语句时,如果发生多个错误,则会存储所有错误的信息,如果未发生错误,则该特定语句的条件信息部分将为空

GET DIAGNOSTICS 语句

使用 GET DIAGNOSTICS 语句,您可以访问此信息。此语句通常在处理程序(在存储程序中)中使用。使用它,您可以一次检索语句或条件信息。

语法

以下是 GET DIAGNOSTICS 语句的语法:

GET [CURRENT | STACKED] DIAGNOSTICS {
   statement_information_item
   [, statement_information_item] ...
   | CONDITION condition_number
   condition_information_item
   [, condition_information_item] ...
}

如果您使用 CURRENT 关键字,则此语句将从当前诊断区域检索信息。如果您使用 STACKED,则此语句将从存储的诊断区域检索信息。默认情况下,将检索有关当前诊断区域的信息。

示例

让我们使用 CREATE 语句在 MySQL 数据库中创建一个名为 MyPlayers 的表,如下所示:

CREATE TABLE MyPlayers(
   ID INT,
   First_Name VARCHAR(255),
   Last_Name VARCHAR(255), 
   Date_Of_Birth date,
   Place_Of_Birth VARCHAR(255),
   Country VARCHAR(255),
   PRIMARY KEY (ID)
);

现在,我们将使用 INSERT 语句在 MyPlayers 表中插入一些记录:

Insert into MyPlayers values
(1, 'Shikhar', 'Dhawan', DATE('1981-12-05'), 'Delhi', 'India'),
(2, 'Jonathan', 'Trott', DATE('1981-04-22'), 'CapeTown', 'SouthAfrica'),
(3, 'Kumara', 'Sangakkara', DATE('1977-10-27'), 'Matale', 'Srilanka'),
(4, 'Virat', 'Kohli', DATE('1988-11-05'), 'Delhi', 'India');

如果验证 MyPlayers 表的内容,您可以观察到创建的记录如下:

select * from MyPlayers;

以上查询的输出如下:

ID First_Name Last_Name Date_Of_Birth Place_Of_Birth Country
1 Shikhar Dhawan 1981-12-05 Delhi India
2 Jonathan Trott 1981-04-22 CapeTown SouthAfrica
3 Kumara Sangakkara 1977-10-27 Matale Srilanka
4 Virat Kohli 1988-11-05 Delhi India

现在,让我们尝试插入另一行,并重复 ID 值:

Insert into MyPlayers values
(2, 'Rohit', 'Sharma', DATE('1987-04-30'), 'Nagpur', 'India');
ERROR 1062 (23000): Duplicate entry '2' for key 'myplayers.PRIMARY'

以下查询检索上述生成的错误的状态和消息:

GET DIAGNOSTICS CONDITION 1 @state = RETURNED_SQLSTATE, @msg= MESSAGE_TEXT;

您可以使用 SELECT 语句显示这些变量(检索到的值)。

SELECT @state, @msg;

输出

以上查询的输出如下:

@state @msg
23000 Duplicate entry '2' for key 'myplayers.PRIMARY'

示例

以下是此语句的另一个示例:

SELECT * FROM table_that_doesnot_exist;
ERROR 1146 (42S02): Table 'table_that_doesnot_exist' doesn't exist

GET DIAGNOSTICS CONDITION 1 @state = RETURNED_SQLSTATE, @msg= MESSAGE_TEXT;

您可以使用 SELECT 语句显示这些变量(检索到的值)。

SELECT @state, @msg;

输出

以上查询产生以下输出:

@state @msg
42S02 Table 'sample.table_that_doesnot_exist' doesn't exist
广告

© . All rights reserved.