2012-04-20 50 views
1

如何使用IF和ELSE语句来定义要根据“深度INTEGER”运行多少存储过程? (例如,如果用户使用1所述的深度周长,仅第一部分将被加工的)在DB2 Store过程中使用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,这将为您提供多种方法来控制深度。 – 2012-04-20 15:51:33

回答

0

更具体地:在你的示例 - 可以”吨。你有效地执行的是对TABLE1的四个查询并将返回的结果光标返回给调用者显示为一个表。这将有助于了解更多的表格结构以及您试图达到的目标,以帮助您解决问题。

+0

好的,我只是设法自己做到了:3无论如何,下次我会记得更多地提到表结构和数据库。 – jonprocter 2012-04-20 12:54:40