DECLARE CONDITION
功能描述
Vastbase在MySQL兼容模式下支持使用DECLARE...CONDITION
语句声明一个命名的错误条件,可以为错误号或者SQLSTATE重命名,在异常处理中可以使用声明的CONDITION。
注意事项
- 该功能仅在数据库兼容模式为MySQL时支持(即数据库实例初始化时指定DBCOMPATIBILITY='B')。
- MySQL中mysql_error_code与错误信息一 一对应,在Vastbase中没有与之对应的关系,仅做语法支持。
- 支持在触发器和匿名块中使用该语法。
语法格式
DECLARE condition_name CONDITION FOR condition_value
其中condition_value内容如下:
{
mysql_error_code
| SQLSTATE [VALUE] sqlstate_value
}
参数说明
condition_name
条件名称。
condition_value
指示要与条件名称相关联的特定条件或条件类别,支持以下形式:
- mysql_error_code:表示MySQL错误代码的整数文字,不支持使用MySQL错误代码0,因为这表示成功而不是错误条件。
- SQLSTATE [VALUE]:一个 5 字符的字符串文字,指示SQLSTATE值。例如:SQLSTATE '22012'。
示例
前置步骤
设置serveroutput为on。
set serveroutput = on;
示例1: 存储过程begin内部声明处理程序,handler方法调用。
1、创建存储过程,begin内部定义condition处理程序。
create or replace procedure testpro() as
declare
a int;
begin
declare t_condition condition for SQLSTATE '22012' ;
declare exit handler for t_condition
begin
RAISE NOTICE 'SQLSTATE = %,SQLCODE = %,SQLERROR=%',SQLSTATE,returned_sqlstate,message_text;
end;
a = 1/0;
end;
/
2、调用存储过程。
call testpro();
返回结果为:
NOTICE: SQLSTATE = 22012,SQLCODE = 33816706,SQLERROR=division by zero
testpro
---------
(1 row)
示例2: 存储过程begin内部声明处理程序,exception方法调用。
1、创建测试表。
create table test(id int,info text);
2、调用存储过程。
create or replace procedure testpro() as
declare
a int;
begin
declare t_condition condition for SQLSTATE '22012' ;
a = 1/0;
EXCEPTION
WHEN t_condition THEN
begin
insert into test values (1,'success');
RAISE NOTICE 'SQLSTATE = %,SQLCODE = %,SQLERRM = %',SQLSTATE,SQLCODE,SQLERRM;
end;
end;
/
3、调用存储过程。
call testpro();
返回结果为:
NOTICE: SQLSTATE = 22012,SQLCODE = 33816706,SQLERRM = division by zero
testpro
---------
(1 row)
4、查询数据。
select * from test;
返回结果为:
id | info
----+---------
1 | success
(1 row)