1

这是一个双重问题,只是想办法解决我的问题。另外,我对 DB2 和存储过程还很陌生,所以请耐心等待。

我正在创建一个使用 Left Join 语句从两个表中获取值的存储过程。这将导致第二个表中的某些值返回空值(因为它们在 tableB 中不存在)。

DECLARE CURSOR C1 WITH RETURN FOR 
select a.name, a.title, b.order from tableA a
left outer join tableB b on a.name = b.name;

现在,我需要一些方法将这些空值设置为默认值 0。

我正在使用的程序可以做到这一点(CAST-IRON),但如果结果集太大,它会减慢编排速度并截断作业日志。所以我正在尝试使用存储过程来解决这个问题。

我的第一个想法是使用FETCH INTO语句和WHILE循环。

WHILE AT_END = 0 DO
FETCH C1 INTO CHNAME, CHTITLE, CHORDER; 
IF CHORDER IS NULL 
THEN SET CHORDER = 0;
END IF;
IF SQLCODE = 100 
THEN SET AT_END = 1;
END IF;
END WHILE;

但这似乎需要创建一个临时表,并在“FETCH INTO”之后使用插入命令使用该表声明另一个游标。所以我想知道是否有另一种方法可以做到这一点,或者在 select 语句中自动设置默认值?

4

1 回答 1

4

使用 . 在 select 语句中设置默认值COALESCE

DECLARE CURSOR C1 WITH RETURN FOR  
select a.name, a.title, COALESCE(b.order,0) as order
from tableA a 
left outer join tableB b on a.name = b.name; 
于 2012-07-11T14:42:49.790 回答