VastbaseG100

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

Menu

自定义错误信息

功能描述

在MySQL兼容模式下,Vastbase G100支持在存储过程和函数中自定义声明SQLSTATE、SQLERRM、SQLCODE变量。当出现异常情况(Exception)后,将变量值作为信息输出到屏幕上。

注意事项

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

语法格式

CREATE [ OR REPLACE ] { PROCEDURE | FUNCTION } object_name [options]
{ IS | AS } 
DECLARE
SQLCODE data_type := value;
SQLERRM data_type := value;
{ declare_statements }
BEGIN
{ execution_statements }
EXCEPTION
WHEN DIVISION_BY_ZERO THEN
RAISE NOTICE 'SQLSTATE = %,SQLCODE = %,SQLERRM=%',SQLSTATE,SQLCODE,SQLERRM;
END;
/

参数说明

  • object_name

    创建的存储过程/函数的名字。

  • data_type

    为SQLCODE和SQLERRM声明的数据类型。

  • value

    为SQLCODE和SQLERRM赋的值,其取值可以为任意数据类型。

  • EXCEPTION

    异常处理情况。

  • SQLSTATE

    是一个五字符的数组组成的输出字符串。用来反映调用中出现的问题。

  • SQLCODE

    普通变量,用于反映异常情况时的错误信息,用户可自定义其取值(value)。

  • SQLERRM

    普通变量,用于反映异常情况时的错误信息,用户可自定义其取值(value)。

  • 如果用户没有声明SQLCODE、SQLERRM作为普通变量,那么这两个参数内部都是有值的,其值分别为系统变量returned_sqlstate和message_text的对应值。(系统变量returned_sqlstate和messge_text分别反映了数据库操作的返回码和错误信息。)

  • 如果用户声明了SQLCODE、SQLERRM作为普通变量,不会影响系统变量returned_sqlstate和message_text的值。

示例

1、打开serveroutput参数。(使信息从存储过程传输回应用程序,输出在屏幕上。)

set serveroutput = on;

2、创建包含异常情况处理的存储过程testpro。

create or replace procedure testpro
as
declare
a int;
SQLCODE char := 'T';
SQLERRM char := 'T';
begin
a := 1/0;
EXCEPTION
WHEN DIVISION_BY_ZERO THEN
RAISE NOTICE 'SQLSTATE = %,SQLCODE = %,SQLERRM=%',SQLSTATE,SQLCODE,SQLERRM;
END;
/

3、调用存储过程。

call testpro();

返回结果为:

NOTICE:  SQLSTATE = 22012,SQLCODE = T,SQLERRM = T
 testpro
------------

(1 row)