VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

ERROR_SEVERITY函数

功能描述

Vastbase G100在SQL Server兼容模式下支持ERROR_SEVERITY函数,可以用于返回导致TRY…CATCH 构造的CATCH 块运行的错误的严重级别。

函数返回类型

int

函数作用域

ERROR_SEVERITY函数支持在 CATCH 块作用域内的任意位置被调用任意次。

函数返回值

  • 在TRY_CATCH构造的CATCH块中调用ERROR_SEVERITY时,返回导致CATCH块运行的错误的严重级别。由于在Vastbase G100中无严重级别对应信息,则以错误号代替。

  • 在CATCH作用域之外被调用ERROR_SEVERITY时,返回NULL

注意事项

  • 该功能仅在数据库兼容模式为SQL Server时支持(即数据库实例初始化时指定DBCOMPATIBILITY='MSSQL')。

  • 该函数依赖TRY CATCH的逻辑完整,在PL/pgSQL语言函数中使用。

  • 在嵌套CATCH块中,ERROR_SEVERITY将返回导致调用其的CATCH块的错误的严重级别。

例如,外部 TRY…CATCH 构造的 CATCH 块可能具有内部 TRY…CATCH 构造。

  • ERROR_SEVERITY函数在该内部CATCH块中运行,它将返回导致内部CATCH块运行的错误的严重级别。

  • ERROR_SEVERITY函数在该外部CATCH 块中运行,它将返回导致外部CATCH块运行的错误的严重级别。

  • 由于SQL Server的错误严重级别在Vastbase G100无对应信息,则在Vastbase G100中暂用错误号代替。

  • 调用ERROR_SEVERITY函数时,()可以不加。可参考示例1

语法格式

ERROR_SEVERITY()

示例

示例1: 在CATCH块中多次使用ERROR_SEVERITY函数。

1、创建测试表tb_1,表中定义了两个字段,其中字段c1为主键。

create table tb_1(c1 int primary key,c2 int);

2、创建存储过程pro_1,其中定义了向测试表tb_1中插入一条数据,并在CATCH块中使用ERROR_SEVERITY函数,将ERROR_SEVERITY函数的返回值作为存储过程的出参。

create or replace procedure pro_1(c1 out text,c2 out varchar(30)) 
as 
begin 
begin try 
insert into tb_1 values(1,1); 
end try 
begin catch 
c1:=error_severity(); 
c2:=error_severity; 
end catch; 
end ; 
/ 

3、初次调用存储过程pro_1,并查询测试表tb_1的数据。

call pro_1('a','a'); 
select * from tb_1;

存储过程pro_1成功执行插入语句,向表tb_1中插入一条数据,返回结果如下:

 c1 | c2
----+----
    |
(1 row)


 c1 | c2
----+----
  1 |  1
(1 row)

4、再次调用存储过程pro_1。

call pro_1('a','a'); 

由于测试表tb_1的主键c1字段已存在值为1的数据,则无法再次插入相同主键值的数据。当再次调用存储过程pro_1时会导致CATCH块运行,ERROR_SEVERITY的返回值会作为存储过程pro_1的出参。返回结果如下:

 c1 | c2
----+----
 20 | 20
(1 row)

示例2: 在CATCH块以外调用ERROR_SEVERITY函数。

1、创建存储过程pro_2,其中存在除数为0的错误。在CATCH块以外的位置使用了ERROR_SEVERITY函数。

create or replace procedure pro_2()
as
begin
begin try
select 1/0;
end try
begin catch
raise notice 'no';
end catch;
raise notice 'error_severity is:%',ERROR_SEVERITY();
end;
/

2、调用存储过程pro_2。

call pro_2();

存储过程pro_2中存在错误,但ERROR_SEVERITY函数是在CATCH块之外被调用的,则函数返回结果为NULL。返回结果显示如下:

NOTICE:  no
NOTICE:  error_severity is:<NULL>
 pro_2
-------

(1 row)

相关链接

TRY…CATCHERROR_LINEERROR_MESSAGEERROR_NUMBERERROR_PROCEDUREERROR_STATE