0

我遇到了过程调用的问题..例如

MAIN_PROCEDURE_starts
  LOOP
  FOR records_present in Table_test
    Begin
      Call_procedure1
    End
    Begin
      Call_procedure2
    End
    Begin
      Call_procedure3 --this procedure gives an output value
    End
    Begin
      Call_procedure4 --this procedure takes input from output of procedure 3
    End
    Begin
      Call_procedure5
    End
  End loop
End

在这里,我面临以下问题:

  1. 如果过程的输出为空,则过程 4 无法执行,因此其他过程,即 5 不工作。
  2. 它不是在循环中迭代。如果任何程序失败,它就会退出循环并且主程序结束。
4

1 回答 1

1

FirstBEGIN....END总而言之,每次Procedure通话都没有感觉。如果您担心Exception Handling,请确保您在 procedure 中执行相同的all操作Call_procedure1,Call_procedure2....

Secondly,你说它没有在循环中迭代,为什么你认为它没有迭代。这是因为在将空值传递给proc 4时出现异常,这引发了异常,因此程序以异常终止。

Thirdly:请详细说明您的要求,如果output是,您想做procedure3什么null?,您想继续还是提出异常。如果您不指定这些条件,那么任何人都很难在这里帮助您。

Forthly:如果你想继续循环,如果任何过程失败,那么不要在过程的异常处理部分引发异常。这样你会实现迭代,但这是糟糕的数据库设计。首先尝试找到什么您想在各种情况下input output或在各种情况下进行exception 然后继续。

MAIN_PROCEDURE_starts
  LOOP
  FOR records_present in Table_test
      Call_procedure1(..) --do proper exception handling in all procedure 
      Call_procedure2(..)
      Call_procedure3(..)  --what you want to do ,do it before calling procedure 4 
      --Suppose if output if null ,you wanted to raise an exception then 

      If output is NULL then 
      Raise e_null_value;
      END IF ;
      Call_procedure4(..) 
      Call_procedure5(..)
    End loop
Exception
  WHEN e_null_value then
    -- whatever you want to do in this case
End;
于 2012-04-06T21:11:33.757 回答