国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > 数据库 > sybase > SybaseIQ存储过程异常处理

SybaseIQ存储过程异常处理

来源:程序员人生   发布时间:2014-01-23 18:46:26 阅读次数:3459次

Sybase IQ数据库中,有两种异常信息,一种是警告warning、一种是错误error。
在存储过程中,对这两种异常信息做了不同的处理
1)在发生告警信息的时候,IQ会继续执行。
2)在发生error时,IQ提供了两种处理方式:

第一种是默认方式,在默认方式下,数据库会将错误发生的SQLSTATE、SQLCODE返回到调用存储过程的环境中,比如说你调用存储过程所使用的客户端

第二种是在创建SP的时候,可以指定,ON EXCEPTION RESUME 子句。如下:
CREATE PROCEDURE dba.sp_name()
ON EXCEPTION RESUME

使用ON EXCEPTION RESUME子句,过程会根据 ON_TSQL_ERROR 选项的设置采取不同的操作。如果 ON_TSQL_ERROR 设置为CONDITIONAL (缺省设置),则当下一条语句处理错误时,将继续执行下面的语句;否则将退出。

我写了一个简单的过程来测试的:
Java代码 
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; 
END 


Java代码 
CALL OuterProc(); 


结果输出为:
Java代码 
Hello from OuterProc. 
Hello from OuterProc. 


若将if 处理语句去掉,,则会显示出错。

在IQ中,处理语句还包括:
• IF
• SELECT @variable =
• CASE
• LOOP
• LEAVE
• CONTINUE
• CALL
• EXECUTE
• SIGNAL
• RESIGNAL
• DECLARE
• SET VARIABLE

作者“yangyoupeng-cn-fujitsu-com”
 

生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生