【问题标题】:Using IF statements in DB2 Store procedure在 DB2 存储过程中使用 IF 语句
【发布时间】:2012-04-20 12:24:28
【问题描述】:

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

--#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/

谢谢:)

【问题讨论】:

  • 这看起来像是(可能)用于递归设置。您在导航树结构吗?您使用的是哪个版本的 DB2 - 最近的大多数版本都支持递归 CTE,这将为您提供多种控制深度的方法。

标签: sql stored-procedures db2


【解决方案1】:

更具体地说:在您的示例中-您不能。您有效地执行的是对 TABLE1 的四个查询并将结果游标返回,因此它在调用者面前显示为一个表。这将有助于了解更多的表结构以及您尝试实现的目标以帮助您解决问题。

【讨论】:

  • 好的,我自己就成功了:3 无论如何,谢谢,下次我会记得提及更多关于表结构和数据库的信息。
【解决方案2】:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-18
    • 1970-01-01
    相关资源
    最近更新 更多