1. 现象、问题描述
在实际的工作中,会有大量的上下级关系.如经理和职员,父目录和子目录等.在管理系统中,会将这样的关系存放在一张数据表中,因为经理和职员,父目录和子目录都有同样的数据属性..
经常会有这样的查询需求,如将经理A的所有职员信息和经理的编号,名称一起查询出来.用普通的SQL就搞不定了.
MDSP项目组,原来都是用oracle数据库,但在V3D5中,开始用DB2数据库.MDSP的MDMC模块,需要将一棵树型的目录结构,在IE中展现出来.
2. 关键过程、根本原因分析
在oracle数据库中,很容易用connect by prior… start with…语句来搞定.但在DB2数据库中,就很麻烦,需要自己写函数来实现这个功能.
目录的数据结构如下:
Folder(folderID,parentID,Name,status)
根目录的ID为ROOT,父ID为null.
在oracle中,将这颗树查询出来的sql语句如下:
Select folderid, parented,name from folder f connect by prior folderid=parentid start with folderID=’ROOT’;
在DB2数据库中,数据库函数支持递归SQL语句.
先定义一下函数,用来返回某个目录的所有子目录.
CREATE FUNCTION F_GETDIRECTCHILDS (PARENT VARCHAR(20))
RETURNS TABLE (ID VARCHAR(20))
LANGUAGE SQL
DETERMINISTIC
READS SQL DATA
STATIC DISPATCH
NO EXTERNAL ACTION
INHERIT SPECIAL REGISTERS
RETURN
SELECT child_id
FROM ( SELECT folderid FROM folder WHERE folder.parentid = f_getdirectchilds.parent) AS T(child_id);
再定义一个函数,用于外部程序调用.来生成所需要的树型结构.
CREATE FUNCTION F_GETRECCHILDS (ROOT VARCHAR(20))
RETURNS TABLE (ID VARCHAR(20))
LANGUAGE SQL
DETERMINISTIC
READS SQL DATA
STATIC DISPATCH
NO EXTERNAL ACTION
INHERIT SPECIAL REGISTERS
RETURN
WITH rec(id) AS
(
values(root)
UNION ALL SELECT t.id FROM rec,
TABLE(f_getdirectchilds(rec.id)) AS T
)
SELECT id FROM rec;
用下面的语句,就可以达到与oracle数据库中同样的效果.
SELECT T.id folderid, parentid ,name FROM TABLE(F_GETRECCHILDS('ROOT')) AS T, folder a where T.id = a.folderid;
3. 结论、解决方案及效果
对于很特殊的查询要求,要充分利用所用数据库的特性,将棘手的问题化解掉.
分享到:
相关推荐
等级保护DB2检测方法第三级标准等级保护DB2检测方法第三级标准
### DB2数据库系统加固规范详解 #### 账号管理与认证授权 **1.1.1 使用加密的AUTHENTICATION模式** 编号:SHG-DB2-01-01-01 名称:使用加密的AUTHENTICATION模式 实施目的:确保数据传输的安全性,通过加密的...
授权信息存储于DB2数据库目录及DBM设置文件中。例如,用户尝试访问特定数据库或执行操作时,DB2会验证其是否有相应的权限。 #### 二、认证机制 DB2的认证过程可由操作系统或外部安全工具执行,具体取决于DB2服务器...
等保2.0,全称为《信息安全等级保护基本要求2.0》(GB/T 22239-2019),是中国信息安全领域的重要标准,旨在为各类信息系统提供安全保护等级划分及实施指南。本指导书是针对等保2.0的相关作业,主要目的是帮助企业和...
- **Oracle**、**Sybase ASE** 和 **DB2**:均获得了最高等级的ISO标准认证,表明这些数据库管理系统在安全性和合规性方面达到了国际公认的高标准。 #### 性能 - **SQL Server**:在多用户环境下性能表现一般。 - ...
### 关于decode函数的使用详解 ...通过以上介绍可以看出,`decode()`函数是一个功能强大且灵活的工具,在SQL查询中具有广泛的应用价值。掌握了它的使用方法后,可以极大地提高数据处理的效率和灵活性。
DB2 9 认证路线图为希望在IT领域中专精于DB2数据库管理的个人提供了一条明确的学习和认证途径。DB2是IBM公司的一款关系型数据库管理系统,广泛应用于各种操作系统,包括Linux、UNIX和Windows。DB2 9认证计划强调了...
DB2 PureScale能够根据不同的SLA要求提供不同的服务等级。 - 例如,在99.999%的可用性要求下,每年的不可用时间不超过5分钟;而在99.9%的可用性要求下,每年的不可用时间则可能长达8小时以上。 4. **与DB2 for z/...
在这个2008年9月的计算机等级考试三级数据库模拟试题中,我们可以看到一系列关于数据库基础知识的题目,涵盖数据库系统的组成、数据模型、数据库管理系统的类型、SQL语言的使用以及数据库设计的基本原则。...
在描述中提到的“2009年9月全国计算机等级考试四级数据库工程师试题”表明,这份资料可能是当年考试的真实题目或者是模拟试题,用于帮助考生复习和准备考试。这样的试题集通常包含了选择题、填空题、简答题以及可能...
全国计算机三级等级考试数据库历年真题(2002年-2009年)是针对计算机技术与软件专业技术资格(水平)考试中的一个重要部分,这个考试旨在测试考生对数据库基础知识、设计理论以及实际操作技能的理解和掌握。...
总的来说,全国计算机等级三级数据库考试中的这一章节着重强调了SQL的基础概念、特点、体系结构以及数据定义和操纵的关键操作,这些都是理解和使用关系数据库系统所必需的基础知识。考生应熟练掌握这些内容,以便在...
该认证主要考察考生对DB2数据库的高级管理技能,包括性能优化、备份与恢复、安全性管理和故障排除等方面的知识。 压缩包内的文件名称列表如下: 1. **CPUID.dll**:这是一个动态链接库文件,可能用于模拟软件的...
计算机等级考试三级数据库知识考试题涉及到的是数据库管理系统的...以上是对计算机等级考试三级数据库知识考试题中涉及知识点的详细解析,涵盖了数据库系统的基本概念、SQL语言操作以及数据库设计与管理的核心内容。
计算机等级考试三级数据库技术是针对计算机专业知识的一项重要考核,涵盖了数据库设计、管理、查询优化以及相关的理论知识。这个资源集合了2005年至2008年间的真题及答案,对于准备参加该考试的考生来说,是一份非常...
主要内容包括两大部分,第一部分是利用‘student’数据库进行的成绩统计,具体涉及构建‘最高分’查询以及嵌套于‘课程’窗体之内的子窗体的建立;第二部分是针对‘db2.mdb’数据库的基础表格调整,如货名列冻结排序...
在准备全国计算机等级考试时,考生需要深入理解这些概念,熟悉数据库设计流程,掌握SQL语句的使用,并了解常见DBMS如Oracle、Sybase、IBM DB2、Microsoft SQL Server以及Visual FoxPro、Access等的特点和应用。...