永发信息网

sql存储过程用递归

答案:1  悬赏:80  手机版
解决时间 2021-04-13 04:52

求sql存储过程用递归 的实例

要有表的

在线等

最佳答案
表结构:
sale_area销售分区表
PK#area_id
class_id
gonghao

prod_class产品分类表
PK#class_id
class_name

问题sql语句:
select distinct pa.class_id from prod_class As pa,prod_class As pb,sale_area where pb.class_id in(select sale_area.class_id from sale_area where sale_area.gonghao=<param>) and pa.class_id like pb.class_id||'%'

问题定义:
根据传入的参数gonghao来确定对应的class_id集,然后遍历这个class_id集,并“扩充”这个集合
要理解“扩充”必须知道class_id是这样设等级:
0为最高级
|_01
| |_011
| |_012
|_02
|_011
|_012
那么拥有等级0的话,所有的等级都应该可以访问,拥有等级01的话,011、012也可以访问。
这句sql的目的就是得到当前员工能访问的所有产品分类及它的子集。

通过自连接的做法在Oracle里是对的,在DB2里就错,原因在于DB2中谓词like两边至少有一个是字符串,也就是说DB2不认为pb.class_id||'%'是字符串。

求解:
要完成上面的任务有什么可替代的办法或改进的地方,注意环境是DB2 UDB 7.2。
---------------------------------------------------------------

就是树的问题。
使用公共表达式可以完成。
你在信息中心里面按recusion去搜索,可以找到递归sql的写法。
---------------------------------------------------------------

问题写的很清楚,我喜欢!
如果要使用DB2的公共表达式建议你把
prod_class产品分类表结构改一下
PK#class_id
class_name
Parent_Class_id

sql语句如下:

with temp_class_id( class_id,class_name)
(
select pc.class_id,pc.class_name from prod_class pc
where pc.class_id in (select sale_area.class_id from sale_area
where sale_area.gonghao=<param>)
union
select pc.class_id,pc.class_name from prod_class pc,
temp_class_id tc
where pc.parent_id = tc.class_id)
select * from temp_class_id;
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
有多少人耍魔兽
英语翻译I still deeply love you the person
如图所示,轻质直杆OA可绕O点转动,直杆下端
中国邮政(中兴邮政支局)怎么去啊,有知道地址
我二姨家的姐姐生的孩子我应该叫什么
问问就是提问+回答问题才可以积分吗?
有什么武术是分为套数或路数的?比如说,军体
260平的跃层楼怎么选中央空调
你好 我们四个人是做淘宝工作室的 一起签了合
对自卑的人有什么名言激励一下么 20分
September_____(come) after August.
双肾轻度积水是怎么回事,会引起肚子痛吗?
眼光决定度量,格局注定结局 这句话是褒义还
团结小区(西南门)在什么地方啊,我要过去处理
河虾怎么清洗图解,小河虾怎么洗干净
推荐资讯
麻烦谁能帮我搞个40*40的问道图像不?
55岁购买10万元国寿松柏养老金保险,分期十年
许山白蛇断桥会 董永七女鹊桥配 山伯英台蝶恋
冒险岛我给一个没有人物的帐号充点卷有用吗?
我爱我家不动产我想知道这个在什么地方
买一张50块钱的电话卡。里面有多少钱
如果有种寂寞不能说是什么歌,什么歌曲的歌词
原来是美男啊第八集里面客串的是谁?
联想thinkpad
don't regret 歌曲翻译
单选题Mike lost the pen &n
大话西游2的4转什么时间能开
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?