当FOR循环中没有行时,可以使用WHENEVER 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
答案 0 :(得分:1)
使用当前版本的Db2,您无法在SQL-PL过程中使用WHENEVER NOT FOUND语法。
相反,您只能在预编译器对其执行操作的嵌入式SQL程序中使用此语法。
在SQL-PL过程中,您可以为NOT FOUND声明处理程序,也可以为SQLCODE 100或SQLSTATE' 02000'