Sybase IQ数据库中,有两种异常信息,一种是警告warning、一种是错误error。
在存储过程中,对这两种异常信息做了不同的处理
1)在发生告警信息的时候,IQ会继续执行。
2)在发生error时,IQ提供了两种处理方式:
第一种是[color=red]默认方式[/color],在默认方式下,数据库会将错误发生的SQLSTATE、SQLCODE返回到调用存储过程的环境中,比如说你调用存储过程所使用的客户端
第二种是[color=red]在创建SP的时候,可以指定,ON EXCEPTION RESUME 子句[/color]。如下:
CREATE PROCEDURE dba.sp_name()
ON EXCEPTION RESUME
使用ON EXCEPTION RESUME子句,过程会根据 ON_TSQL_ERROR 选项的设置采取不同的操作。如果 ON_TSQL_ERROR 设置为CONDITIONAL (缺省设置),则当下一条语句处理错误时,将继续执行下面的语句;否则将退出。
我写了一个简单的过程来测试的:
结果输出为:
若将if 处理语句去掉,则会显示出错。
在IQ中,处理语句还包括:
• IF
• SELECT @variable =
• CASE
• LOOP
• LEAVE
• CONTINUE
• CALL
• EXECUTE
• SIGNAL
• RESIGNAL
• DECLARE
• SET VARIABLE
在存储过程中,对这两种异常信息做了不同的处理
1)在发生告警信息的时候,IQ会继续执行。
2)在发生error时,IQ提供了两种处理方式:
第一种是[color=red]默认方式[/color],在默认方式下,数据库会将错误发生的SQLSTATE、SQLCODE返回到调用存储过程的环境中,比如说你调用存储过程所使用的客户端
第二种是[color=red]在创建SP的时候,可以指定,ON EXCEPTION RESUME 子句[/color]。如下:
CREATE PROCEDURE dba.sp_name()
ON EXCEPTION RESUME
使用ON EXCEPTION RESUME子句,过程会根据 ON_TSQL_ERROR 选项的设置采取不同的操作。如果 ON_TSQL_ERROR 设置为CONDITIONAL (缺省设置),则当下一条语句处理错误时,将继续执行下面的语句;否则将退出。
我写了一个简单的过程来测试的:
CREATE PROCEDURE "DBA"."OuterProc"() ON EXCEPTION RESUME
BEGIN
declare command_test exception for SQLSTATE '52003';
MESSAGE 'Hello from OuterProc.' TO CLIENT;
signal command_test; --模拟错误消息
if SQLSTATE=52003 then MESSAGE 'Hello from OuterProc.' TO CLIENT
end if;
ENDCALL OuterProc();结果输出为:
Hello from OuterProc.
Hello from OuterProc.若将if 处理语句去掉,则会显示出错。
在IQ中,处理语句还包括:
• IF
• SELECT @variable =
• CASE
• LOOP
• LEAVE
• CONTINUE
• CALL
• EXECUTE
• SIGNAL
• RESIGNAL
• DECLARE
• SET VARIABLE
本文介绍了SybaseIQ数据库中警告和错误的处理机制。对于警告,数据库会继续执行;而对于错误,提供了默认处理方式和ONEXCEPTIONRESUME子句两种方式。通过示例展示了ONEXCEPTIONRESUME的应用。
3636

被折叠的 条评论
为什么被折叠?



