2014-02-10 22 views
0

我想在我的代码中处理所有类型的生成信号。我知道如何用Declare Handler来捕捉特定的一个,但是我想要所有这些。通过声明处理程序捕获DB2 SQL-PL中所有类型的提升信号的方法

例如,在这里我看到了72822信号。

DECLARE EXIT HANDLER FOR SQLSTATE '72822' 
    BEGIN 
    IF (var = 'OK') 
     RESIGNAL SQLSTATE '72623' SET MESSAGE_TEXT = 'Got SQLSTATE 72822'; 
    ELSE 
     RESIGNAL SQLSTATE '72319' SET MESSAGE_TEXT = var; 
    END; 

我会调用存储过程,我不知道代码,我必须能够应对所有可能的信号(例如插入一个表中的信号代码。)

我想要像

DECLARE EXIT HANDLER FOR ALL 

回答

2

这将是DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING,我认为。

http://pic.dhe.ibm.com/infocenter/db2luw/v10r5/topic/com.ibm.db2.luw.sql.ref.doc/doc/r0004239.html

+1

上面的答案是一种方法。但是,我会建议您将处理程序分开(取决于应用程序)。 你会想要一个退出处理程序的例外,但你可能会想要一个继续处理程序的警告。 为SQLWARNING DECLARE CONTINUE HANDLER 这很有帮助,因为只有简单转换时并不总是想退出。 – jgriffin

+0

@mustaccio这只是一个问题,你有兴趣为SQL PL中的单元测试开发一个开源框架吗?联系我,如果你有兴趣:angoca at yahoo dot com – AngocA

+0

同意@jgriffin。继续处理程序对于异常也很有用,因为您可能想要从某些类型的错误中恢复(例如,如果不存在,则创建一个表)。 – 2014-06-30 07:43:55