这在DB2中意味着什么:为NOT FOUND..声明CONTINUE处理程序。。?

这在DB2中意味着什么:为NOT FOUND..声明CONTINUE处理程序。。?,db2,Db2,我试图理解这个DB2语句的含义: 找不到的声明继续处理程序 这出现在我粘贴在下面的LOOP语句的IBM代码示例中。除了DECLARE,我不确定其他单词中的哪些是离散关键字,我也找不到任何有帮助的 它看起来像是关于错误GOTO labelname的VisualBasic语句,在上下文中,如果找不到,则似乎是说return-1。但我不确定它是如何起作用的,在哪里起作用的,也不确定它到底指的是SQL、循环还是什么 CREATE PROCEDURE LOOP_UNTIL_SPACE (OUT COUNT

我试图理解这个DB2语句的含义:

找不到的声明继续处理程序

这出现在我粘贴在下面的LOOP语句的IBM代码示例中。除了DECLARE,我不确定其他单词中的哪些是离散关键字,我也找不到任何有帮助的

它看起来像是关于错误GOTO labelname的VisualBasic语句,在上下文中,如果找不到,则似乎是说return-1。但我不确定它是如何起作用的,在哪里起作用的,也不确定它到底指的是SQL、循环还是什么

CREATE PROCEDURE LOOP_UNTIL_SPACE (OUT COUNTER INTEGER)
    LANGUAGE SQL
BEGIN
    DECLARE v_counter INTEGER DEFAULT 0;
    DECLARE v_firstnme VARCHAR(12);
    DECLARE v_midinit CHAR(1);
    DECLARE v_lastname VARCHAR(15);
    DECLARE c1 CURSOR FOR
        SELECT firstnme, midinit, lastname
        FROM employee;
    DECLARE CONTINUE HANDLER FOR NOT FOUND -- <--?
        SET counter = -1;                  -- <--?
    OPEN c1;
    fetch_loop:
    LOOP
        FETCH c1 INTO v_firstnme, v_midinit, v_lastname;
        IF v_midinit = ' ' THEN
            LEAVE fetch_loop;
        END IF;
        SET v_counter = v_counter + 1;
    END LOOP fetch_loop;
    SET counter = v_counter;
    CLOSE c1;
END;
这个片段:

DECLARE CONTINUE HANDLER FOR NOT FOUND -- <--?
        SET counter = -1;                  -- <--?
这意味着,每当SQL语句返回SQLCODE=100且未找到行时,请执行此单个语句集计数器=-1,然后继续执行下一条语句,即触发SQLCODE 100的语句后面的语句

在您的代码示例中,接下来将执行FETCH后面的语句,该语句获得sqlcode=100


由于计数器是一个输出参数,因此每当发生sqlcode 100时,计数器将被设置为-1。这可能不是我们想要的。

您可以找到SQL PL过程语言构造的文档。谢谢,该链接非常有用。现在我明白了为什么很难找到这方面的帮助:每个单词都太常见了,而整个短语并没有作为一个词出现在帮助页面中。请注意,照目前的情况,如果employee中没有带空白midinit的行,那么您得到的示例可能会导致无限循环。通常情况下,您会有一个条件循环,例如,在异常处理程序中while v_flag 1和set v_flag=1。谢谢,这一切似乎都是我所想的,但我无法理解应该发生什么的正确流程。这加上@mustaccio在他的其他评论中分享的内容,真的帮助了我的理解。