【问题标题】:Run functions recursively递归运行函数
【发布时间】:2015-11-24 15:46:48
【问题描述】:

我有 2 个函数 function1function2。 现在我想知道如何递归地运行它们。

也许我会描述它: function1 的输入是来自 function2 输出的数组表。 function1 的输出也是 function2 的输入的数组表,依此类推。

当 function1 返回一些值时, function2 应该使用这些值执行。 当 function2 返回一些值时, function1 应该被执行。

Function1 和 function2 应该一直执行,直到其中一个返回 null。可以在pl/sql中做吗?你能给我一些建议吗?如何正确传达变量?

编辑:

一般应该是这样的:

declare
tab2 num_array;
v_Return NUM_ARRAY;
v_Return2 NUM_ARRAY;
BEGIN
select ID bulk collect into tab2 from account;   
  v_Return := function1(tab2);
 if v_return is not null then  
  v_return2 :=function2(v_return);

  --and now iteration:
    if v_return2.count>0 then
      v_Return := function1(v_return2);
        if v_return.count>0 then
           v_return2 :=function2(v_return);
              if v_return2.count>0 then
                  v_Return := function1(v_return2);
                      if v_return..count>0 then
                          v_return2 :=function2(v_return);
                  -- and so on
END;

我当然想避免做这样的事情,可以动态吗?

----编辑2

while(num=1)
loop
  if  v_return.count>0 then  
        num := 1;
        v_return2 :=function2(v_return);

            if v_return2.count>0 then
              num :=1;
              v_Return := function1(v_return2);

            else num :=0;
            end if;

  else num :=0;
  end if;

end loop;   
END;

【问题讨论】:

  • 你先调用哪个函数?
  • 这些函数除了互相调用还有什么作用?
  • 首先我将调用 function1 并使用其他一些定义的表作为输入(假设 table1)。并在调用 function2 并将 function2 的输出作为 function1 的输入之后
  • 很难解释他们到底做了什么,首先是从function2中查找基于id帐户的层次结构/树,然后function2根据function1输出搜索其他一些东西
  • 当然在function1里面是一个消除之前处理​​过的账户的条件

标签: function plsql


【解决方案1】:

使用一个简单的循环怎么样?

loop
   v_return2 := function2(v_return);
   exit when v_return2.count = 0;
   v_return := function1(v_return2);
   exit when v_return.count = 0;
end loop;

【讨论】:

  • 我找到了一些其他的解决方案,我编辑了我的帖子(edit2),当然你的解决方案看起来更好:)
猜你喜欢
  • 2018-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多