CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Oracle >  基础和管理

求教利用Oracle的存储过程实现的查询?

楼主qqen(SMSPortal)2002-07-31 15:45:53 在 Oracle / 基础和管理 提问

我现正做的项目,碰到一个棘手的问题。就是查询所有的邮票分类,然后列出所有的分类(以树型结构列出)。  
  有这么一张表:  
  四个子段,stc_id(分类的id),stc_name(分类的名字),stc_parentid(此分类的父类id,顶层id为:0),stc_isvisible(分类是否可用)  
   
  我现有大致的思路是:(以parentid为查询条件)首先查询parentid为0的所有分类,后建立一个临时的表,用以存储查询出分类的  
  id,name,然后在把查询出的分类的parentid传入查询语句,如此循环。直到查询为空。然后返回上一级查询。如此按树型结构列出所有的分类。  
      小弟刚学pl/sql,实现起来....望pl/sql高手指教小弟一二? 问题点数:100、回复次数:11Top

1 楼qqen(SMSPortal)回复于 2002-07-31 15:54:07 得分 0

高手呢?Top

2 楼kmlinda()回复于 2002-07-31 15:54:49 得分 0

好象不需要用PL/SQL就可以,试试下面的SQL:  
  select   stc_id,stc_name   from   表A  
  order   by   parentidTop

3 楼black_dragon(半仙)回复于 2002-07-31 16:09:17 得分 100

不必如此,一个查询语句就可以完成树状查询  
  select   *   from   your_table   start   with   stc_parentid='0'   connect   by   prior   stc_id=stc_parentid;Top

4 楼qqen(SMSPortal)回复于 2002-07-31 16:23:05 得分 0

我觉的应该用递归方法。因为一个分类id它有可能即是上一层子类又是下一层父类Top

5 楼qqen(SMSPortal)回复于 2002-07-31 16:32:05 得分 0

我主要希望列出的数据按树型列出:如:  
      邮票  
          人物邮票  
              历史人物邮票  
                  战国历史人物邮票  
                  三国历史人物邮票  
              国外人物邮票  
                  欧洲国外人物邮票  
          山水邮票  
              国内山水邮票  
              国外山水邮票  
          军事邮票  
              ............  
              ............Top

6 楼qqen(SMSPortal)回复于 2002-07-31 16:49:44 得分 0

盼望black_dragon(半仙)大哥回答.Top

7 楼black_dragon(半仙)回复于 2002-07-31 17:29:14 得分 0

给你个例子:  
  select   *   from   em1_org_area   start   with   parent_code='000000000000'  
  connect   by   prior   area_code=parent_code;  
   
  AREA_CODE         AREA_NAME                                                                                     LEV_ID   PARENT_CODE    
  ------------   --------------------------------------------------   ------   ------------  
  001000000000   中国                                                                                                         1   000000000000  
  001001000000   中北区                                                                                                     2   001000000000  
  001001001000   河北                                                                                                         3   001001000000  
  001001001001   秦皇岛                                                                                                     4   001001001000  
  001001001002   石家庄                                                                                                     4   001001001000  
  001002000000   中南区                                                                                                     2   001000000000  
  001002001000   湖北                                                                                                         3   001002000000  
  001002001001   武汉                                                                                                         4   001002001000  
  001002002000   湖南                                                                                                         3   001002000000  
  001002002001   长沙                                                                                                         4   001002002000  
  001002002002   湘潭                                                                                                         4   001002002000  
  001002003000   广东                                                                                                         3   001002000000  
  001003000000   东北                                                                                                         2   001000000000  
  001003002000   辽宁                                                                                                         3   001003000000  
  001003001000   黑龙江                                                                                                     3   001003000000  
  001003005000   吉林                                                                                                         3   001003000000  
   
  16   rows   selectedTop

8 楼CHENGXB(阿困)回复于 2002-07-31 18:04:19 得分 0

要用递归这样的办法,代码简单。  
  PL/SQL恐怕不行,它只能返回按树型顺序排列的结果集,不能直接显示成树状结构。Top

9 楼kmlinda()回复于 2002-07-31 19:25:55 得分 0

可是,用递归的话,性能上怎么样呢?Top

10 楼fbjia(流沙)回复于 2002-07-31 19:40:27 得分 0

还是用程序来完成吧,递归就可以。Top

11 楼CHENGXB(阿困)回复于 2002-07-31 20:01:33 得分 0

递归是比较慢,递归算法都可以转化成非递归的,代码较复杂。  
  如果用程序实现的话,建议不要在递归程序中执行查询,而是在递归开始前取出所有的数据,然后在递归程序中对哪个数据集进行过滤,这样能快许多。  
  Top

相关问题

  • ORACLE中存储过程怎样返回查询结果集?
  • Oracle存储过程
  • Oracle 存储过程
  • 在Oracle中如何利用存储过程返回结果集?
  • Oracle如何利用存储过程创建表等?
  • 急!急!急!急!急!如何在oracle里建查询的存储过程?
  • Oracle存储过程(急)
  • oracle的存储过程
  • Oracle存储过程两问
  • oracle 存储过程 急问!!!!!!!

关键词

  • 查询
  • 结构
  • 数据
  • 历史
  • code
  • sql
  • 邮票
  • 递归
  • stc
  • parentid

得分解答快速导航

  • 帖主:qqen
  • black_dragon

相关链接

  • Oracle类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo