求教利用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




