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
廣告