ERROR_MESSAGE函数
功能描述
Vastbase G100在SQL Server兼容模式下支持ERROR_MESSAGE函数,可以针对错误处理捕获相应错误的消息文本。此错误文本提示的错误导致了TRY…CATCH构造的CATCH块执行。
返回类型
text
函数作用域
ERROR_MESSAGE函数支持在CATCH块作用域内的任意位置被调用任意次。
函数返回值
在TRY…CATCH构造的CATCH块中调用ERROR_MESSAGE时,如果出现错误,则返回导致CATCH块运行的错误消息的完整文本。
在CATCH作用域之外被调用ERROR_MESSAGE时,返回
NULL
。
注意事项
该特性仅在数据库兼容模式为SQL Server时能够使用(即创建DB时DBCOMPATIBILITY='MSSQL'),在其他数据库兼容模式下不能使用该特性。
该函数依赖TRY…CATCH的逻辑完整,在PL/pgSQL语言函数中使用。
调用ERROR_MESSAGE函数时,
()
可以不加。
语法格式
ERROR_MESSAGE()
前置步骤: 创建兼容模式为SQL Server的库db_sqlserver,并进入。
CREATE DATABASE db_sqlserver DBCOMPATIBILITY='MSSQL';
\c db_sqlserver
示例1: 在CATCH块中调用ERROR_MESSAGE函数。
1、创建测试表tb_1,表中定义了两个字段,其中字段c1为主键。
create table tb_1(c1 int primary key,c2 int);
2、创建存储过程pro_1,其中定义了向测试表tb_1中插入一条数据,并在CATCH块中使用ERROR_MESSAGE函数,将ERROR_MESSAGE函数的返回值作为存储过程的出参。
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_message();
c2:=error_message;
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_MESSAGE的返回值会作为存储过程的出参。返回结果如下:
c1 | c2
------------------------------------------------------------+------------------------------------------------------------
duplicate key value violates unique constraint "tb_1_pkey" | duplicate key value violates unique constraint "tb_1_pkey"
(1 row)
示例2: 在CATCH块以外调用ERROR_MESSAGE函数。
1、创建存储过程pro_2,其中存在除数为0的错误。在CATCH块以外的位置使用了ERROR_MESSAGE函数。
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_message is:%',ERROR_MESSAGE();
end;
/
2、调用存储过程pro_2。
call pro_2();
存储过程pro_2中存在错误,但ERROR_MESSAGE函数是在CATCH块之外被调用的,则函数返回结果为NULL
。返回结果显示如下:
NOTICE: no
NOTICE: error_message is:<NULL>
pro_2
-------
(1 row)
相关链接
TRY…CATCH、ERROR_LINE、ERROR_NUMBER、ERROR_PROCEDURE、ERROR_SEVERITY、ERROR_STATE