ITPub博客

首页 > 数据库 > Oracle > oracle使用with递归查询

oracle使用with递归查询

原创 Oracle 作者:henry_law_14 时间:2016-06-16 09:22:01 0 删除 编辑
首先来参考一下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博客 ” ,链接:https://blog.itpub.net/29619999/viewspace-2120253/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2014-04-21

  • 博文量
    34
  • 访问量
    34300