未触发SQL继续处理程序

未触发SQL继续处理程序,sql,db2-400,Sql,Db2 400,IBMiV7R1M0。每当发生错误时,我需要继续处理一条语句,就我所读到的而言,例如: DECLARE CONTINUE处理程序似乎就是答案,所以 我有一个非常简单的过程,如下所示: exec SQL create or replace procedure test_prod1 (in test2 decimal(1,0)) language sql modifies sql data

IBMiV7R1M0。每当发生错误时,我需要继续处理一条语句,就我所读到的而言,例如:

DECLARE CONTINUE处理程序似乎就是答案,所以

我有一个非常简单的过程,如下所示:

exec SQL create or replace procedure test_prod1   
         (in test2 decimal(1,0))                  
         language sql modifies sql data           
         begin                                    
         declare continue handler for sqlexception
            begin end;                            

         update DUPEPF set INT2 = test2;          
         end;                                     

据我所知,这意味着无论何时发生错误(如唯一密钥冲突),SQL语句都将继续,但事实并非如此。每当出现密钥冲突且未处理下一行时,该语句就会停止。我不明白为什么会出现这种情况

您的continue处理程序正在工作

您的过程将忽略
UPDATE
语句引发的错误并继续。除了没有别的事可做

仅仅因为proc忽略了错误,并不意味着DB可以忽略其update语句处理中的错误

编辑
处理程序更改存储过程或UDF处理错误的方式……将它们视为“捕获”DB抛出的错误的一种方式。它们不会阻止DB首先抛出这些错误

有道理吗

为了做你想做的事情,你需要使用你自己的光标,比如

     create or replace procedure test_prod1   
     (in test2 decimal(1,0))                  
     language sql modifies sql data           
     begin           
     declare myInt integer;
     DECLARE DUPLICATE_KEY CONDITION FOR SQLSTATE '23505';
     DECLARE END_OF_TABLE CONDITION FOR SQLSTATE '02000';
     declare test_cursor cursor for
        select int2 from DUPEPP for update;
     declare exit handler for END_OF_TABLE
        close test_cursor;                         
     declare continue handler for DUPLICATE_KEY
        begin end;                            


     open test_cursor;
     fetch_loop:
     LOOP
       fetch next from test_cursor into myInt;
       update dupepf set int2 = test2
         where current of test_cursor;
     END LOOP fetch_loop;
     end;

嗯,我认为当您使用CONTINUE处理程序时,行为是忽略错误并继续处理下一条记录(UPDATE语句已获取的记录)。为了说明这一点,CONTINUE handler并不意味着“继续下一条记录”,它只是意味着“不要惊慌失措,停止整个程序”?