2012-04-20 9 views
1

IFおよびELSEステートメントを使用して、どのようにストアード・プロシージャーを「深さINTEGER」に基づいて実行するかを定義しますか?具体的にはDB2ストア・プロシージャーのIFステートメントの使用

--#SET TERMINATOR/

CREATE PROCEDURE STOREP2(IN str_in VARCHAR(1), IN depth INTEGER) 
        LANGUAGE SQL MODIFIES SQL DATA 
        DYNAMIC RESULT SETS 1 


CRSUBJ: BEGIN 

DECLARE C1 CURSOR WITH RETURN FOR 

SELECT T1.COLUMN1, T1.COLUMN2 FROM TABLE1 AS T1 WHERE T1.COLUMN1=str_in 

UNION 

SELECT T2.COLUMN1, T2.COLUMN2 FROM TABLE1 AS T1, TABLE1 AS T2 WHERE T1.COLUMN1=str_in AND T2.COLUMN1=T1.COLUMN2 

UNION 

SELECT T3.COLUMN1, T3.COLUMN2 FROM TABLE1 AS T1, TABLE1 AS T2, TABLE1 AS T3 WHERE T1.COLUMN1=str_in AND T2.COLUMN1=T1.COLUMN2 AND T3.COLUMN1=T2.COLUMN2 

UNION 

SELECT T4.COLUMN1, T4.COLUMN2 FROM TABLE1 AS T1, TABLE1 AS T2, TABLE1 AS T3, TABLE1 AS T4 WHERE T1.COLUMN1=str_in AND T2.COLUMN1=T1.COLUMN2 AND T3.COLUMN1=T2.COLUMN2 AND T4.COLUMN1=T3.COLUMN2; 

OPEN C1; 
RETURN; 

END CRSUBJ/ 

感謝:)

+0

これは、再帰的なセットアップの場合と同じように見えます。あなたは木構造をナビゲートしていますか?どのDB2のバージョンを使用していますか?最新のもののほとんどは再帰的なCTEをサポートしています。これは、深さを制御する複数の方法を提供します。 –

答えて

0

を(EGは、場合には、ユーザーは最初の部分のみが処理されるだろう、奥行き境界のために1を使用):あなたの例では - あなたができます」 t。効果的に実行するのは、TABLE1を介した4つの照会と結果のカーソルの戻しであり、呼び出し元に対して1つの表として表示されます。テーブル構造の詳細と、問題を解決するために達成しようとしていることを理解するのに役立ちます。

+0

私はちょうどそれを自分でやっていました:3とにかくおかげさまで、次回はテーブルの構造とデータベースについてもっと覚えています。 – jonprocter

関連する問題