将 CONNECT BY 移植到 DB2

本文深入探讨了在将应用程序从Oracle移植到DB2 UDB for Linux、UNIX和Windows时遇到的递归查询挑战。重点分析了Oracle与DB2在递归实现上的差异,包括语法、底层处理方法以及输出特性,并通过一个实用案例展示如何在DB2中匹配Oracle的CONNECT BY和伪列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

动机

当把应用程序从 Oracle 移植或迁移到 DB2 UDB for Linux、UNIX 和 Windows 时,递归查询成为一块巨大的绊脚石。能理解和使用 Oracle 型递归的开发人员,却常常无法自然而然地理解 DB2 中的递归,反过来也是一样。

乍一看来,这似乎是因为 DB2 是按照 SQL 标准中的定义并使用公共表表达式(CTE)和 UNION ALL 来实现递归的,而 Oracle 则使用 CONNECT BY 子句和一组所谓的伪列(pseudo column)及系统过程来定义递归。然而,两者之间的差别不仅在于语法方面。在底层,DB2 处理递归时采用的方法是逐层递归(广度优先),而 Oracle 采用的是深度优先的方法。后一种方法自然地产生与组织结构图(org chart)相匹配的输出。

在本文中,我使用一个实用的例子,这个例子将 CONNECT BY 和相关的伪列与 DB2 递归逐步进行匹配。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值