1

これは一種の二重の質問であり、私の問題を達成する方法を考えているだけです。また、私はDB2とストアドプロシージャにかなり慣れていないので、我慢してください。

LeftJoinステートメントを使用して2つのテーブルから値を取得するストアドプロシージャを作成しています。これにより、2番目のテーブルの一部の値がnull値を返します(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;

ここで、これらのnull値をデフォルト値の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;

ただし、その場合は、一時テーブルを作成し、「FETCHINTO」の後に挿入コマンドを使用してそのテーブルで別のカーソルを宣言する必要があるようです。それで、これを行う別の方法があるのか​​、それとも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 に答える