自定义错误信息
功能描述
在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)