代码之家  ›  专栏  ›  技术社区  ›  Christopher Smith

每当找不到处理程序时都不能在for循环中使用

  •  1
  • Christopher Smith  · 技术社区  · 6 年前

    当for循环中没有行时,是否可以使用every not found处理程序?

    我正在编写一个模板存储过程生成器,作为2E模型转换的一部分。我有数千个2E函数,我需要一个存储过程格式,我正在努力为每种类型的2E函数找到最好和最有效的通用案例模板。

    这是我的模板程序

    CREATE PROCEDURE SP_M3_000TSG (
        IN HONB DECIMAL(9, 0) 
        , OUT ABCD CHAR(3) DEFAULT ' ' 
        , OUT EECD CHAR(6) DEFAULT ' ' 
        , OUT RTN CHAR(7) DEFAULT NULL 
        )
    
        LANGUAGE SQL
        PROGRAM TYPE SUB
    
        -- #######################################################################
        -- # SP_M3_000TSG
        -- #######################################################################
    BEGIN
        DECLARE SQLCODE INTEGER DEFAULT 0;
        DECLARE SQLSTATE CHAR(5) DEFAULT '00000';
    
        M3_INIT:BEGIN
          -- do some init stuff
        END M3_INIT;
    
        FOR M3_000TSG 
            **declare WHENEVER NOT FOUND **
            AS CUR_ECDQREL1 CURSOR
            FOR
                SELECT * FROM ECDQREL1 WHERE DQHONB = HONB
                DO 
                    do some stuff;
        END FOR;
    
        GO TO M3_EXIT;
    
        M3_NO_ROWS: BEGIN
            do some stuff for no rows;
        END M3_NO_ROWS;
    
        M3_EXIT: BEGIN
            do some stuff;
            RETURN;
        END M3_EXIT;
    END
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   mao    6 年前

    对于当前版本的DB2,不能在SQL-PL过程中随时使用找不到语法。

    相反,只能在预编译器作用于嵌入式SQL程序的地方使用这种语法。

    在SQL-PL过程中,可以声明找不到的处理程序,也可以对sql code 100或sqlstate“02000”进行代码检查。