VastbaseG100

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

Menu

ERROR_LINE

功能描述

Vastbase G100在SQL Server兼容模式下支持ERROR_LINE函数,可以针对错误处理捕获相应的错误行。此行对应的错误导致了TRY…CATCH构造的CATCH块执行。

函数作用域

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

函数返回类型

int

函数返回值

  • 在TRY…CATCH构造的CATCH块中调用ERROR_LINE时,返回出现错误的行号。

    如果在存储过程或触发器中出现错误,则返回例程中的行号,可参考示例2

  • 在TRY…CATCH构造的CATCH块作用域之外调用ERROR_LINE时,返回NULL

注意事项

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

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

  • 在嵌套CATCH块中,ERROR_LINE返回特定于引用它的CATCH块的作用域的错误行号。

  • 调用ERROR_LINE函数时,()可以不加,可参考示例2

语法格式

ERROR_LINE()

示例

示例1: 在系统表PG_PROC中查询ERROR_LINE函数。

select proname from pg_proc where proname='error_line';

查询结果显示为:

   proname
-------------
 error_line
(1 row)

示例2: 分别在CATCH作用域内、外调用error_line函数。

1、创建存储过程pro_test,其中存在除数为0的错误,位于例程的第六行。分别在不同的位置调用error_line函数。

create or replace procedure pro_test()
as
begin
begin try
raise notice 'error_line1 is:%',error_line();
raise notice 'error_line1 is:%',error_line;
select 1/0;
end try
begin catch
raise notice 'error_line2 is:%',error_line();
raise notice 'error_line2 is:%',error_line;
end catch;
raise notice 'error_line3 is:%',error_line();
raise notice 'error_line3 is:%',error_line;
end ;
/

2、调用存储过程。

call pro_test();

只有在CATCH块中调用的error_line函数返回的是例程中错误所在行号,其余都返回NULL。返回结果分别为:

NOTICE:  error_line1 is:<NULL>
NOTICE:  error_line1 is:<NULL>
NOTICE:  error_line2 is:6
NOTICE:  error_line2 is:6
NOTICE:  error_line3 is:<NULL>
NOTICE:  error_line3 is:<NULL>
 pro_test
----------

(1 row)

示例3: 在存储过程中设置error_line作为函数出参。

1、创建存储过程pro_1,其中存在除数为0的错误。在try语句中包含了三个空行,将错误的行号控制在例程的第七行。

create or replace procedure pro_1(c1 inout int,out c2 int) 
as 
begin 
begin try 



select c1/0; 
end try 
begin catch 
raise notice '%',error_line(); 
c1:=error_line(); 
c2:=error_line; 
end catch; 
end ; 
/ 

2、调用存储过程pro_1。

call pro_1(3,3);

由于存储过程中存在错误,调用存储过程后返回导致CATCH执行的错误在例程中的行号:

NOTICE:  7
 c1 | c2
----+----
  7 |  7
(1 row)

相关链接

TRY…CATCHERROR_MESSAGEERROR_NUMBERERROR_PROCEDUREERROR_SEVERITYERROR_STATE