oracle使用with递归查询

首先来参考一下oracle 11.2的新特性,递归查询

http://www.oracle.com/technetwork/cn/articles/hartley-recursive-086819-zhs.html

小试一下使用with递归来解决问题

题目是
啤酒 2元1瓶
      4个瓶盖换1瓶
      2个空瓶换1瓶
10元可以喝几瓶

--------------------------------------------------------------------------------------------------
/*
啤酒 2元1瓶
      4个瓶盖换1瓶
      2个空瓶换1瓶
10元可以喝几瓶
*/
with r(btl,lid,lqr) as
 (select 10 / 2 btl, 10 / 2 lid, 10 / 2 lqr from dual
       -- 初始10元,5个瓶子,5个盖子,5瓶酒
  union all
       -- 递归  
  select mod(btl, 2) + trunc(btl / 2) + trunc(lid / 4) btl,   -- 取模得到剩余瓶子或瓶盖
         mod(lid, 4) + trunc(btl / 2) + trunc(lid / 4) lid,      -- 换酒规则,每多一瓶酒,就多一个瓶子和一个瓶盖,多一瓶酒
         lqr + trunc(btl / 2) + trunc(lid / 4) lqr
    from r
   where trunc(btl / 2) != 0 or trunc(lid / 4) != 0 -- 终止条件
 ) select btl "剩余瓶子", lid "剩余瓶盖", lqr "喝了的酒(瓶)" from r;


    剩余瓶子 剩余瓶盖 喝了的酒(瓶)

5 5 5

4 4 8

3 3 11

2 4 12

2 2 14

1 3 15



来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29619999/viewspace-2120253/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29619999/viewspace-2120253/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值