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. プロシージャの出力が null の場合、プロシージャ 4 は実行に失敗しており、このために他のプロシージャ、つまり 5 が機能していません。
  2. ループで繰り返していません。いずれかの手順が失敗した場合、その手順はループから抜け出し、メイン手順は終了します。
4

1 に答える 1

1

First何よりも、通話BEGIN....ENDごとに持っているという感覚がありません。Procedure心配な場合は、手順Exception Handlingで同じことを行っていることを確認してください。allCall_procedure1,Call_procedure2....

Secondly、あなたはループで反復していないと言っていますが、なぜ反復していないと思いますか.それは、null 値を proc 4 に渡すときに例外が発生し、例外が発生したためです。したがって、プログラムは例外で終了しました。

Thirdly: 要件を詳しく説明してください。 の場合はどうしたいoutputですprocedure3null?, 続行しますか、それとも例外を発生させますか? これらの条件を指定しないと、ここであなたを助けることは誰にも難しくなります.

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 に答える