Sql 在DB2存储过程中使用IF语句

Sql 在DB2存储过程中使用IF语句,sql,stored-procedures,db2,Sql,Stored Procedures,Db2,如何使用IF和ELSE语句来定义基于“depth INTEGER”运行的存储过程的数量?(例如,如果用户使用1作为深度周长,则仅处理第一部分) 谢谢:)更具体地说:在你的例子中,你不能。您有效地执行的是对TABLE1的四个查询,并将结果游标返回给调用者,使其显示为一个表。了解更多关于表结构的信息以及您为解决问题所做的努力会有所帮助。好的,我自己就做到了:3无论如何,谢谢你,下次我会记得提到更多关于表结构和数据库的信息。这看起来(可能)是针对递归设置的。您正在浏览树结构吗?您使用的是哪个版本的DB

如何使用IF和ELSE语句来定义基于“depth INTEGER”运行的存储过程的数量?(例如,如果用户使用1作为深度周长,则仅处理第一部分)


谢谢:)

更具体地说:在你的例子中,你不能。您有效地执行的是对TABLE1的四个查询,并将结果游标返回给调用者,使其显示为一个表。了解更多关于表结构的信息以及您为解决问题所做的努力会有所帮助。

好的,我自己就做到了:3无论如何,谢谢你,下次我会记得提到更多关于表结构和数据库的信息。这看起来(可能)是针对递归设置的。您正在浏览树结构吗?您使用的是哪个版本的DB2?大多数最新版本都支持递归CTE,这将为您提供多种控制深度的方法。
--#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/