这是一个双重问题,只是想办法解决我的问题。 另外,我对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'之后使用insert命令声明该表的另一个游标。所以我想知道是否有其他方法可以做到这一点,或者在select语句中自动设置默认值?
答案 0 :(得分:4)
使用COALESCE
在select语句中设置默认值。
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;