JDBC から Oracle データベースのストアド プロシージャを呼び出す場合、次のような代替手段があります。どちらを使用することをお勧めしますか?その理由は?
prepareCall("{call MY_FUN}");
prepareCall"{BEGIN MY_FUN; END;}");
お返事をありがとうございます。
よろしくヨハネス
場合によります。を使用begin..end
すると、無名のPL/SQLプログラム・ブロックをコールするだけで、ストアド・プロシージャがコールされます。を使用する場合はcall
、SQL からプロシージャを呼び出します。Call には、値などを返す可能性があるという追加の利点があります。詳細は、『 Oracle Database SQL言語リファレンス: コール』を参照してください。
とはいえ、このようなプロシージャを呼び出すだけであれば、大きな違いはありません。プロシージャ自体は PL/SQL であり、SQL であるため、SQL と PL/SQL の間で余分なコンテキスト スイッチが発生し、オーバーヘッドが発生するため、理論的begin..end
には少し効率的だと思います。Call
しかし、この違いがあったとしても気付かないと思います。
プロシージャを 1 つだけ呼び出したい場合、両方のステートメントはおそらく同じです。ただし、無名 PLSQL ブロックを使用すると、より多くの楽しみが得られます。たとえば、複数のプロシージャをコールするか、PLSQL ブロック内で許可されている任意の構文を使用します。
prepareCall("BEGIN MY_FUN('no-braces-with-begin-end-syntax'); MORE_FUN; A_LOT_MORE_FUN; END;");
要件に応じて、任意のタイプの手順を使用できます。要件を明確にしてください。