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 |