Stored procedures 可以在FOR循环中使用where NOT FOUND处理程序吗

Stored procedures 可以在FOR循环中使用where NOT FOUND处理程序吗,stored-procedures,db2,db2-400,Stored Procedures,Db2,Db2 400,当FOR循环中没有行时,是否可以使用where NOT FOUND处理程序 作为2E模型转换的一部分,我正在编写一个模板存储过程生成器。我有成千上万个2E函数,我需要一个存储过程格式,我正在尝试为每种类型的2E函数找到最好和最有效的通用案例模板 这是我的模板程序 CREATE PROCEDURE SP_M3_000TSG ( IN HONB DECIMAL(9, 0) , OUT ABCD CHAR(3) DEFAULT ' ' , OUT EECD CHAR(6)

当FOR循环中没有行时,是否可以使用where 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

对于当前版本的Db2,您不能在SQL-PL过程中使用where-NOT-FOUND语法

相反,您只能在预编译器对其进行操作的嵌入式SQL程序中使用此语法


在SQL-PL过程中,您可以为NOT FOUND声明一个处理程序,也可以为SQLCODE 100或SQLSTATE“02000”编写代码检查。

我怀疑这里没有多少人知道2E是什么。。。你可能真的应该问,知道2E是不需要的。只是尝试制作一个好的存储过程,不会让我感到尴尬。用例是什么接受参数如果找不到行执行FOR循环做一些清理我尝试不声明变量只是为了测试是否有rowstory,被
FOR
循环弄糊涂了…我从未使用过游标变量。我要做的是在FOR循环之前声明一个标志,并在FOR循环内部设置标志。我希望不必申报我自己的国旗