2011-09-03 17 views

答えて

33

ストアドプロシージャをこれら二つを比較TERは、」PL/SQL言語での命令のシーケンスです。いくつかのDBMSによってプログラミング言語が実装されているため、モデルに頻繁に適用される一連のクエリを格納し、処理負荷をアプリケーション層と共有できます。

プリペアドステートメントではなく、実際の値のプレースホルダと書かれたクエリです。あなたはクエリを書いて、それはDBMSによってただ一度コンパイルされ、次に値を渡してプレースホルダに配置します。プリペアドステートメントを使用する利点は、パフォーマンスを大幅に向上させ、アプリケーションをSQLインジェクションから保護することです。

違いは、用意された文を保存できないことです。あなたが1つを実行する必要があるたびに、それらを「準備する」必要があります。一方、ストアド・プロシージャはスキーマに関連付けて格納できますが、PL/SQLを使用してそれらを記述する必要があります。

DBMSでサポートされているかどうかを確認する必要があります。

どちらも非常に便利なツールです。組み合わせることもできます。

この短い説明を参考にしてください。

10

ストアドプロシージャは、DBに格納された - それがコンパイルされたDB(オラクル、MS SQL Serverのなど)に応じて、潜在的に最適化された準備しますあなたは、サーバー上でそれを作成したときに...

プリペアドステートメントを使用すると、ステートメントを実行するたびに、実行の準備ができて、サーバーによって作成されたサーバーと実行計画によって解析された文がある...通常それは理にかなっています声明は、これらの「準備」は

...セッション固有または「グローバル」のいずれかされているDBサーバ(オラクルなど)に応じて...複数回実行し、時には設定オプションされたときに何が「ありませんベット彼らは、特定のユースケースを持っているので、あなたが...

0

他の回答はこちらを示唆しているが、私は明示的に長所と短所をリストしたいと思います:

ストアドプロシージャ

PROS:

  1. 各クエリが多く処理されますサーバがそれらをあらかじめコンパイルするので、まっすぐなクエリよりも速くなります。
  2. 各クエリは1回だけ書き込む必要があります。異なるセッションや異なる接続であっても、必要な回数だけ実行できます。
  3. SQLだけでは書き込みが不可能または難しいプログラミング構造(ループ、条件文、およびエラー処理など)をクエリに含めることができます。

CONS

  1. は、データベースサーバが使用するどのようなプログラミング言語の知識が必要。
  2. 書き込みや呼び出しに特別な権限が必要な場合があります。

プリペアドステートメントストアドルーチンと同様に

PROS

  1. をクエリは、プリコンパイルされているので、迅速です。

CONS

  1. 各接続またはセッションで再書き込む必要があります。
  2. オーバーヘッドに値するように、準備された各ステートメントは複数回実行する必要があります(ループなど)。クエリが1回だけ実行されると、サーバーがSQLをコンパイルする必要があるため、用意されたステートメントの準備に多くのオーバーヘッドがかかりますが、準備されたステートメントも作成されます。

私のお金のために、私は一度だけ書いておく必要があるので、毎回「ストアドプロシージャ」に行きます。その後、プロシージャを呼び出すたびに、新しい接続を行っているかどうか、プロシージャをループ内で呼び出すかどうか、時間が節約されます。唯一の欠点は、プログラミング言語を学ぶ時間を費やす必要があることです。ストアドプロシージャを作成する権限がない場合は、準備されたステートメントを使用しますが、同じセッションで同じクエリを繰り返し複数回実行する必要がある場合に限ります。

これは、私がこれらの2つの構成要素の相違点について数ヶ月の鋭い研究をしてから得た結論です。誰かが私が作っている悪い一般化を訂正することができれば、それは評判へのいかなる損失の価値があるでしょう。

関連する問題