ITPUB??ì3
12月微软Hyper-V虚拟化沙龙主题征集
ITPUB论坛 » Oracle开发 » 有兴趣的来看下

标题: 有兴趣的来看下
离线 双629



精华贴数 0
个人空间 0
技术积分 136 (13324)
社区积分 5 (16717)
注册日期 2008-8-1
论坛徽章:0
      
      

发表于 2008-9-17 17:39 
有兴趣的来看下

我现在想实现c语言中i=i*(i+1);这样的递归,请问在oracle中可以用什么办法实现呢?


只看该作者    顶部
离线 smallnavy
平常心


精华贴数 1
个人空间 3
技术积分 2407 (664)
社区积分 3478 (409)
注册日期 2003-9-2
论坛徽章:55
生肖徽章2007版:龙2008北京奥运纪念徽章:摔跤生肖徽章:龙   
      

发表于 2008-9-17 18:04 
oracle也可以这样写,不知道LZ究竟想要怎么实现。
i:=i*(i+1);


__________________
竹仗芒鞋轻胜马,一蓑烟雨任平生
只看该作者    顶部
离线 双629



精华贴数 0
个人空间 0
技术积分 136 (13324)
社区积分 5 (16717)
注册日期 2008-8-1
论坛徽章:0
      
      

发表于 2008-9-17 18:07 
回复 #2 smallnavy 的帖子

declare
i number(4);
j number(20);
begin
for i in 1..1999 loop
    i:=i*(i+1);
end loop;dbms_output.put_line(i);
end;
我是想实现2000!,可是这样递归会报错的。


只看该作者    顶部
在线/呼叫 caizhuoyi
Oracle Stranger


精华贴数 2
个人空间 0
技术积分 1604 (1068)
社区积分 488 (1470)
注册日期 2006-3-1
论坛徽章:5
授权会员生肖徽章2007版:蛇生肖徽章2007版:龙2008北京奥运纪念徽章:棒球数据库板块每日发贴之星 
      

发表于 2008-9-17 18:30 
会发生溢出。
用collection是一个解决方法。


__________________
我不在江湖,但江湖中有我的传说;
我身在江湖,江湖里却没有我的传说。
只看该作者    顶部
离线 iamclq
Chx


来自 FuJian
精华贴数 0
个人空间 6
技术积分 776 (2515)
社区积分 34 (6045)
注册日期 2006-9-4
论坛徽章:7
授权会员2008北京奥运纪念徽章:铁人三项生肖徽章2007版:鸡数据库板块每日发贴之星数据库板块每日发贴之星数据库板块每日发贴之星
生肖徽章2007版:鼠     

发表于 2008-9-17 19:27 
ORACLE也支持递归的啊


只看该作者    顶部
离线 mychary
高级会员



来自 合肥
精华贴数 0
个人空间 0
技术积分 7116 (186)
社区积分 164 (2687)
注册日期 2003-9-18
论坛徽章:11
ITPUB元老会员2007贡献徽章会员2006贡献徽章授权会员生肖徽章2007版:鼠生肖徽章2007版:马
2008北京奥运纪念徽章:柔道2008北京奥运纪念徽章:花样游泳数据库板块每日发贴之星数据库板块每日发贴之星数据库板块每日发贴之星 

发表于 2008-9-17 20:05 
SQL> CREATE OR REPLACE FUNCTION ttt (
  2    p_in number)
  3    RETURN number IS   
  4    v_ReturnValue     NUMBER;
  5    vv number;
  6   
  7  BEGIN
  8   
  9    IF p_in <=1 THEN
10      v_ReturnValue := 1;
11    ELSE
12    vv :=p_in -1;
13      v_ReturnValue := p_in*ttt(vv);
14    END IF;
15  
16    RETURN v_ReturnValue;
17  END ttt;
18  /

函数已创建。

SQL> select ttt(1) from dual;

    TTT(1)
----------
         1

SQL> select ttt(3) from dual;

    TTT(3)
----------
         6

SQL> select ttt(4) from dual;

    TTT(4)
----------
        24

SQL> 没有进行错误处理


只看该作者    顶部
在线/呼叫 newkid
资深新手
老程序员


来自 银河系
精华贴数 2
个人空间 0
技术积分 2756 (579)
社区积分 0 (121048)
注册日期 2004-6-26
论坛徽章:5
生肖徽章2007版:马生肖徽章2007版:鸡2008北京奥运纪念徽章:垒球2008北京奥运纪念徽章:羽毛球  
      

发表于 2008-9-17 21:53 
溢出的话只能用几个变量拼起来表示一个数字了。


__________________
只看该作者    顶部
离线 smallnavy
平常心


精华贴数 1
个人空间 3
技术积分 2407 (664)
社区积分 3478 (409)
注册日期 2003-9-2
论坛徽章:55
生肖徽章2007版:龙2008北京奥运纪念徽章:摔跤生肖徽章:龙   
      

发表于 2008-9-17 23:26 


QUOTE:
原帖由 双629 于 2008-9-17 18:07 发表
declare
i number(4);
j number(20);
begin
for i in 1..1999 loop
    i:=i*(i+1);
end loop;dbms_output.put_line(i);
end;
我是想实现2000!,可是这样递归会报错的。

这里的i是循环变量,不能这样使用的。


__________________
竹仗芒鞋轻胜马,一蓑烟雨任平生
只看该作者    顶部
离线 双629



精华贴数 0
个人空间 0
技术积分 136 (13324)
社区积分 5 (16717)
注册日期 2008-8-1
论坛徽章:0
      
      

发表于 2008-9-18 09:05 
回复 #7 newkid 的帖子

楼上能说明白点怎么拼接吗?刚开始学,很多不懂。谢谢了


只看该作者    顶部
离线 liang573728
烂石头



精华贴数 0
个人空间 0
技术积分 318 (6346)
社区积分 1 (40258)
注册日期 2005-10-15
论坛徽章:1
授权会员     
      

发表于 2008-9-18 10:01 


QUOTE:
原帖由 mychary 于 2008-9-17 20:05 发表
SQL> CREATE OR REPLACE FUNCTION ttt (
  2    p_in number)
  3    RETURN number IS   
  4    v_ReturnValue     NUMBER;
  5    vv number;
  6   
  7  BEGIN
  8   
  9    IF p_in  select ttt(1) from dual;

    TTT(1)
----------
         1

SQL> select ttt(3) from dual;

    TTT(3)
----------
         6

SQL> select ttt(4) from dual;

    TTT(4)
----------
        24

SQL> 没有进行错误处理




只看该作者    顶部
相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问