CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Oracle >  开发

在包中如何实现函数的递归调用??

楼主chen_pb(倒霉)2005-09-30 08:57:31 在 Oracle / 开发 提问

在一个包中有这样一个函数,需要递归调用:  
      FUNCTION   GET_ITEM_CONFIG(ERRBUF   OUT   VARCHAR2,  
                                                        RETCODE   OUT   NUMBER,  
                                                        P_LINE_ID   NUMBER,  
                                                        P_PARENT_CONFIG_ID   NUMBER,  
                                                        P_NUMBER   NUMBER)   RETURN   NUMBER   IS  
      V_CONFIG_ID   NUMBER;  
      V_HEADER_C   VARCHAR2(240);  
      V_NUMBER   NUMBER;  
      V_DESCRIPTION   VARCHAR2(1000);  
      V_ERRBUF   VARCHAR2(240);  
      V_RETCODE   VARCHAR2(240);  
      CURSOR   CUR_A   IS  
          SELECT   CONFIG_ID    
              FROM   BF_ITEM_CONFIGS    
            WHERE   PARENT_CONFIG_ID=P_PARENT_CONFIG_ID  
                AND   ORDER_LINE_ID=P_LINE_ID  
            ORDER   BY   CONFIG_ID;  
      BEGIN  
          OPEN   CUR_A;  
          LOOP  
              FETCH   CUR_A   INTO   V_CONFIG_ID;  
              EXIT   WHEN   CUR_A%NOTFOUND;  
              IF   V_CONFIG_ID<>P_PARENT_CONFIG_ID   THEN  
                  GET_ITEM_CONFIG(V_ERRBUF,  
                                                  V_RETCODE,  
                                                  P_LINE_ID,  
                                                  V_CONFIG_ID,  
                                                  P_NUMBER   +   1);  
              ELSE  
                  V_NUMBER:=P_NUMBER;  
                  V_HEADER_C:='';  
                  LOOP  
                      EXIT   WHEN   V_NUMBER=0;  
                      V_HEADER_C:=V_HEADER_C   ||   V_SEPERATE;  
                      V_NUMBER:=V_NUMBER   -   1;  
                  END   LOOP;  
                  SELECT   ASSEMBLY_ITEM_NUMBER||'   '||  
                                COMPONENT_ITEM_NUMBER||'   '||  
                                ITEM_NUMBER||'   '||  
                                ITEM_DESCRIPTION_CN  
                      INTO   V_DESCRIPTION  
                      FROM   BF_ITEM_CONFIGS  
                    WHERE   ORDER_LINE_ID=P_LINE_ID  
                        AND   CONFIG_ID=V_CONFIG_ID  
                        AND   PARENT_CONFIG_ID=P_PARENT_CONFIG_ID;  
                  FND_FILE.PUT_LINE(FND_FILE.OUTPUT,TO_CHAR(P_NUMBER)||V_HEADER_C||V_DESCRIPTION);  
              END   IF;  
          END   LOOP;  
          CLOSE   CUR_A;  
          RETURN   V_CONFIG_ID;  
      END;  
  但是编译的时候报:函数GET_ITEM_CONFIG()未定义。  
  如何预定义函数?  
  这个问题如何解决呢?  
  谢谢!! 问题点数:100、回复次数:4Top

1 楼WangZWang(先来)回复于 2005-09-30 09:30:50 得分 10

调用时用execute   immediate动态语句执行试试!Top

2 楼sbaz(万神渡劫)回复于 2005-09-30 10:00:27 得分 60

GET_ITEM_CONFIG(V_ERRBUF,  
                                                  V_RETCODE,  
                                                  P_LINE_ID,  
                                                  V_CONFIG_ID,  
                                                  P_NUMBER   +   1);  
  这里有点问题.P_NUMBER   +   1应该用一个值来表示吧.  
  你先用NUM=P_NUMBER+1;  
  再写GET_ITEM_CONFIG(V_ERRBUF,  
                                                  V_RETCODE,  
                                                  P_LINE_ID,  
                                                  V_CONFIG_ID,  
                                                  NUM);试试?记得在前面声明这个变量!  
   
  我写了个简单的.  
  create   or   replace   function   dy(i   in   out   number)   return   number   is  
      n   number;  
  begin  
      if   i=1   then  
      return   1;  
      else    
      n:=i-1;  
      return   i*dy(n);  
      end   if;  
  end   dy;  
   
  declare    
      --   Local   variables   here  
      i   integer   :=6;  
  begin  
      --   Test   statements   here  
      i:=dy(i);  
      dbms_output.put_line(i);  
  end;  
  打印出结果:720  
  你可以参考一下.Top

3 楼bobfang(匆匆过客)回复于 2005-09-30 10:11:41 得分 30

楼主在GET_ITEM_CONFIG中递归调用函数处写错了,函数是有返回值的,不能直接调用,只能定义一个变量,然后变量:=函数(...)。Top

4 楼sbaz(万神渡劫)回复于 2005-09-30 10:42:57 得分 0

感觉楼主的程序很乱,很多地方都有问题.  
  递归的时候参数都没值,怎么执行啊?你还在外层用循环,是不是有那么复杂啊?Top

相关问题

  • 有一个函数递归调用问题向大虾求教。
  • 关于递归调用函数的问题!
  • pb中可以递归调用函数吗?
  • 关于函数递归调用传递参数的问题!
  • 递归函数
  • 递归函数?
  • 试题!说明函数循环调用和递归调用的区别?
  • 递归调用
  • 递归调用!
  • 递归调用?

关键词

  • 函数
  • 递归
  • 调用
  • config
  • retcode
  • number
  • errbuf
  • 变量
  • cur
  • dy

得分解答快速导航

  • 帖主:chen_pb
  • WangZWang
  • sbaz
  • bobfang

相关链接

  • Oracle类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo