4

JDBC から Oracle データベースのストアド プロシージャを呼び出す場合、次のような代替手段があります。どちらを使用することをお勧めしますか?その理由は?

  1. prepareCall("{call MY_FUN}");

  2. prepareCall"{BEGIN MY_FUN; END;}");

お返事をありがとうございます。

よろしくヨハネス

4

3 に答える 3

5

場合によります。を使用begin..endすると、無名のPL/SQLプログラム・ブロックをコールするだけで、ストアド・プロシージャがコールされます。を使用する場合はcall、SQL からプロシージャを呼び出します。Call には、値などを返す可能性があるという追加の利点があります。詳細は、『 Oracle Database SQL言語リファレンス: コール』を参照してください。

とはいえ、このようなプロシージャを呼び出すだけであれば、大きな違いはありません。プロシージャ自体は PL/SQL であり、SQL であるため、SQL と PL/SQL の間で余分なコンテキスト スイッチが発生し、オーバーヘッドが発生するため、理論的begin..endには少し効率的だと思います。Callしかし、この違いがあったとしても気付かないと思います。

于 2013-10-07T07:43:04.813 に答える
3

プロシージャを 1 つだけ呼び出したい場合、両方のステートメントはおそらく同じです。ただし、無名 PLSQL ブロックを使用すると、より多くの楽しみが得られます。たとえば、複数のプロシージャをコールするか、PLSQL ブロック内で許可されている任意の構文を使用します。

prepareCall("BEGIN MY_FUN('no-braces-with-begin-end-syntax'); MORE_FUN; A_LOT_MORE_FUN; END;");
于 2013-10-07T07:48:25.173 に答える
-2

要件に応じて、任意のタイプの手順を使用できます。要件を明確にしてください。

于 2013-10-07T11:29:10.143 に答える