【发布时间】:2018-05-29 20:33:55
【问题描述】:
当 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
【问题讨论】:
-
我怀疑这里没有多少人会知道 2E 是什么......你应该问CA 2E/Plex Community
-
真的,不需要知道2E。只是尝试制作不会让我尴尬的良好存储过程。
-
用例是什么 如果没有找到行,则接受参数执行 FOR 循环 清理我试图不声明变量只是为了测试是否有任何行
-
抱歉,被
FOR循环弄糊涂了……我从未使用过游标变体。
标签: stored-procedures db2 db2-400