こんにちは誰も私の質問に関するいくつかの概念的な知識を教えていただけますか? 私たちは、どのようなシナリオを使用するのですか?oracleでPROCEDUREのキーワード「RETURN」を使用しています ありがとう私たちはどのようなシナリオを使用しますか?oracleのPROCEDUREでキーワード「RETURN」を使用します
答えて
ほとんどの場合、プロシージャを早期に終了したいとき。これがいい考えかどうかは議論の余地があります。あなたのすべての方法で単一の入口と出口を好むための良い議論があります。しかし、時々、IF
ステートメントをネストするのではなく、何らかの状態を維持しようとするのではなく、複数の出口ポイントを持つコードを構築することが合理的です。
たとえば、属性を検証するために、さまざまなビジネスルールを適用する必要があるとします。呼び出し元は、フラグが返されたことを確認し、妥当性検査が失敗した場合はメッセージを返します。私はそれらの規則の1つが違反されるとすぐに戻ってそれを構造化するかもしれません。もちろん
CREATE OR REPLACE PROCEDURE validate_name(p_name IN varchar2,
p_success_flag OUT boolean,
p_error_msg OUT varchar2)
AS
l_cnt_disallowed pls_integer;
BEGIN
IF(p_name IS NULL)
THEN
p_success_flag := false;
p_error_msg := 'The name must be non-NULL';
return;
END IF;
IF(length(p_name) > 50)
THEN
p_success_flag := false;
p_error_msg := 'The name must be <= 50 characters.';
return;
END IF;
SELECT COUNT(*)
INTO l_cnt_disallowed
FROM disallowed_names
WHERE name = p_name;
IF(l_cnt_disallowed > 0)
THEN
p_success_flag := 0false
p_error_msg := 'The name must not be in the disallowed list.';
return;
END IF;
p_success_flag := true;
end;
のようなものは、あなたは、単一の出口点とIF/ ELSIF/ ELSIF/ ELSE
(またはCASE
)としてこれを実装することができます。それは確かに機能しますが、IF
ステートメントの前にすべての計算(select count(*)
のような)をしなければならない可能性があります。そのため、特定のビジネスルールのロジックが2つの異なる場所にあるため、コードを読みにくくする可能性があります。そのため、各ビジネスルールの完全なロジックを理解することは難しくなります。あなたはロジックが一緒に残るように計算を入れたいかもしれませんが、かなり深く入れ子になったIF
ステートメントを使って、ルールがスキップされないようにすることができます。
あなたはまた、ルールに違反されたときtrue
に設定されますフラグ(即ちl_found_error boolean := false
)を追加することができ、その後のIF
文はそれをチェックすることができ、そしてこの方法のための単一の出口点が存在するであろう。それは全く合理的なアプローチです。それはあなたが精神的に追跡する必要があるもう一つの状態変数を追加し、変数がtrue
に設定された後に変数をリセットするようなことを誰も愚かなことをしなかったことを少なくとも素早く検証します。個人的には、この種の場合には、return
から、後続のコードが実行されないことを見ることができるという利点は、単一のリターンを有することの価値をわずかに上回るが、それは主観的意見である。
この特定のケースでは、2つのフィールドを持つオブジェクトを返す関数、またはエラーコードを返す代わりにルールに違反したときに例外をスローするプロシージャを持っていますが、カスタムエラーメッセージを見つけて解析しますエラースタックとそれをユーザに提示することは、単にOUT
パラメータを使用するよりもかなり複雑になる可能性があります。
- 1. 私はどのようなreturn文を使用できますか?
- 2. どのように私たちはグループでSQLでJOINを使用します
- 3. このシナリオではどのように代理人を使用しますか?
- 4. 次のシナリオではどのデータベースを使用しますか?
- 5. このシナリオでGoogle APIはどのように使用しますか?
- 6. hscursesまたはncursesのどちらを使用しますか?
- 7. 私たちはランダム/ランダムオーダーコントローラをどのような状況で使用していますか?
- 8. Documentdbのようなキーワードを使用できますか?
- 9. 私はJavascriptのconstキーワードを使用していますが、IEではどうなりますか?
- 10. マルチアクティビティアンドロイドアプリではどのようなコンテキストを使用しますか?
- 11. JsonResultまたはJson:どちらを使用しますか?
- 12. `else return`または` return`を使うべきでしょうか?
- 13. このシナリオでExecuteScalarはどのように使用できますか?
- 14. 私たちはネイティブクエリとhqlクエリを使用しますか?
- 15. 私たちはJHipsterをライセンスなしでエンタープライズアプリケーションに使用できますか
- 16. 私たちはパイプラインでアイテムを使用しています
- 17. ビットマップにはどのようなコンテナを使用しますか?
- 18. ArrayListにはどのようなクラスを使用しますか?
- 19. v8クランクシャフトはどのようなプロファイラを使用しますか?
- 20. どのようなシナリオで、完全な解析の代わりにチャンクを使用しますか?
- 21. 私たちはDateTimeFormatterにどのような依存関係を使用できますか
- 22. 私のサイトにはどのようなスキーマコードを使用しますか?
- 23. なぜ私たちはjoomlaで命名規則を使用しますか?
- 24. if文の中でreturnを使用するとどうなりますか?
- 25. 私は、次のSQLを使用していますOracleでテーブルを作成しようとしています
- 26. どのように私はperlを使用してクリックメソッドを使用してファイルをダウンロードできますか?
- 27. ilist vs list.whyと私たち両方から使用しているとき私は実用的なシナリオ
- 28. このMVCですか?私はどのような「デザインパターン」を使用しましたか?
- 29. ないような方法エラーrobospice-改造を使用している間、私たちは com.octo.android.robospice使用している私たちのプロジェクトでは
- 30. SinatraまたはMerbを使用するシナリオは何ですか?
[呼び出し側に制御を戻す](https://docs.oracle.com/cloud/latest/db112/LNPLS/subprograms.htm#CIHIIJEE)?私はあなたの質問を理解しているか分からない。正確に何を混乱させているのか? –