stored-procedures - 可以在 FOR 循环中使用 WHENEVER NOT FOUND 处理程序吗
问题描述
当 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
解决方案
对于当前版本的 Db2,您不能在 SQL-PL 过程中使用 WHENEVER NOT FOUND 语法。
相反,您只能在预编译器对其起作用的嵌入式 SQL 程序中使用此语法。
在 SQL-PL 过程中,您可以为 NOT FOUND 声明处理程序,也可以对 SQLCODE 100 或 SQLSTATE '02000' 进行代码检查。
推荐阅读
- scala - 如何在 Akka HTTP 中嵌套路由?
- angular - 错误错误:找不到类型为“对象”的不同支持对象“[对象对象]”
- php - 将表 PHP 中的变量传递给引导模式
- java - 无法读取 biz.aQute.bnd:bnd-maven-plugin:jar:3.3.0 的工件描述符:
- jmeter-4.0 - 如何在 Jmeter 的负载测试期间保存值并将它们写入外部 csv 文件
- javascript - jQuery draggable : 只能在一个 droppable 上拖动
- reactjs - array.list 在 componentDidMount 中总是返回 0
- linux - Shell 嵌套变量无法识别
- javascript - 等待后多次调用 setState
- c# - 我们如何识别 Xamarin 中选择器的选定项的视图?