更新日期:2024年09月11日
功能说明
语句用于获取错误缓冲区的内容,包括报错信息、DML 操作影响结果数等
语法格式
GET [CURRENT | STACKED] DIAGNOSTICS
{
statement_information_item [, statement_information_item] ...
| CONDITION condition_number condition_information_item
[, condition_information_item] ...
}
statement_information_item:
target = statement_information_item_name
condition_information_item:
target = condition_information_item_name
statement_information_item_name:
GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
1385
NUMBER
| ROW_COUNT
condition_information_item_name: {
CLASS_ORIGIN
| SUBCLASS_ORIGIN
| RETURNED_SQLSTATE
| MESSAGE_TEXT
| GBASE_ERRNO
| CONSTRAINT_CATALOG
| CONSTRAINT_SCHEMA
| CONSTRAINT_NAME
| CATALOG_NAME
| SCHEMA_NAME
| TABLE_NAME
| COLUMN_NAME
| CURSOR_NAME
}
表5- 191 参数说明
参数名称
描
述
statement_information_item
statment 执行情况信息捕获反馈,包括NUMBER、
ROW_COUNT
condition_information_item
捕获异常情况信息。
表5- 192 statement_information_item_name 参数说明
参数名称
描
述
number
number 中包含WARNING 和错误的数量。
row_count
只记录GET DIAGNOSTICS 命令之前最后一条DML 操作
的影响行数,不能累加,如果想获取多条DML 语句的影响
行数,需要在每条DML 语句后执行GET DIAGNOSTICS
命令。
表5- 193 condition_information_item_name 参数说明
参数名称
描
述
no
表示错误或WARNINGS 的序号。
number
number 中包含WARNING 和错误的数量。
row_count
只记录GET DIAGNOSTICS 命令之前最后一条DML 操作
的影响行数,不能累加,如果想获取多条DML 语句的影响
行数,需要在每条DML 语句后执行GET DIAGNOSTICS
命令。
gbase_errno
记录错误号。
returned_sqlstate
记录错误状态。
message_text
记录错误信息。
GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
1386
示例
示例1:获取错误数。
DROP TABLE IF EXISTS t;
DROP TABLE IF EXISTS tt;
DROP PROCEDURE IF EXISTS p1;
DELIMITER //
CREATE PROCEDURE p1()
BEGIN
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
BEGIN
GET DIAGNOSTICS @num1 = NUMBER;
SELECT @num1;
END;
DELETE FROM tt ;
DROP TABLE IF EXISTS t;
GET DIAGNOSTICS @num2 = NUMBER;
SELECT @num2;
END //
DELIMITER ;
CALL p1;
执行结果如下:
gbase> CALL p1;
+-------+
| @num1 |
+-------+
| 1 |
+-------+
1 row in set
+-------+
| @num2 |
+-------+
| 1 |
+-------+
1 row in set
Query OK, 0 rows affected, 8 warnings
gbase> SHOW WARNINGS; +-------+------+-----------------------------------------+
| Level | Code | Message |
+-------+------+-----------------------------------------+
| Note | 1051 | 192.168.103.77:5050 - Unknown table 't' |
| Note | 1051 | 192.168.103.75:5050 - Unknown table 't' |
| Note | 1051 | 192.168.103.74:5050 - Unknown table 't' |
GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
1387
| Note | 1051 | 192.168.103.76:5050 - Unknown table 't' |
| Note | 1051 | 192.168.103.77:5258 - Unknown table 't' |
| Note | 1051 | 192.168.103.75:5258 - Unknown table 't' |
| Note | 1051 | 192.168.103.76:5258 - Unknown table 't' |
| Note | 1051 | 192.168.103.74:5258 - Unknown table 't' |
+-------+------+-----------------------------------------+
8 rows in set
示例2:获取DML 操作影响的行数。非DML 操作执行完成后,如果用GET
DIAGNOSTICS 语法获得DML 操作影响行数,得到的结果是-1。
DROP PROCEDURE IF EXISTS p1;
DELIMITER |
CREATE PROCEDURE p1()
BEGIN
DECLARE row_count INT;
GET DIAGNOSTICS row_count = ROW_COUNT;
SELECT row_count;
END|
DELIMITER ;
CALL p1();
执行结果如下:
gbase> CALL p1();
+-----------+
| row_count |
+-----------+
| -1 |
+-----------+
1 row in set
示例3:获取DML 操作影响的行数。DML 操作执行完成后,如果用GET
DIAGNOSTICS 语法获得DML 操作影响行数,得到的结果是1。
DROP TABLE IF EXISTS tt;
CREATE TABLE t(a int);
DROP PROCEDURE IF EXISTS p1;
DELIMITER |
CREATE PROCEDURE p1()
BEGIN
DECLARE row_count INT;
INSERT INTO t VALUES(1);
GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
1388
GET DIAGNOSTICS row_count = ROW_COUNT;
SELECT row_count;
END|
DELIMITER ;
CALL p1();
执行结果如下:
gbase> CALL p1();
+-----------+
| row_count |
+-----------+
| 1 |
+-----------+
1 row in set
Query OK, 0 rows affected
示例4:获取错误码,错误状态和错误信息。
DROP TABLE IF EXISTS t1;
CREATE TABLE t1(i int,vc varchar(20))distributed by('i');
DROP PROCEDURE IF EXISTS p1;
DELIMITER |
CREATE PROCEDURE p1()
BEGIN
DECLARE errno varchar(50);
DECLARE sstate varchar(50);
DECLARE message varchar(50);
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
BEGIN
GET DIAGNOSTICS CONDITION 1
errno=gbase_errno,sstate=returned_sqlstate,message=message_text;
END;
DELETE FROM t1 WHERE a>0;
SELECT errno,sstate,message;
END |
DELIMITER ;
CALL p1();
执行结果如下:
gbase> CALL p1(); +-------+--------+--------------------------------------+
| errno | sstate | message |
+-------+--------+--------------------------------------+
| 1054 | 42S22 | Unknown column 'a' in 'where clause' |
+-------+--------+--------------------------------------+
1 row in set
Query OK, 0 rows affected
GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
1389