これは私がジャークのように聞こえるようにするものですが、実際にはそうではありません。あなたの質問に対する私の答えは別の質問です。 「あなたは は、データベースがどのように機能するかを理解していない場合は、 開発政策をどのようなビジネスを定義しているのですか?」
あなたは「ビューはちょうどいつでも自分自身を再構築する必要があります」と言います。あなたは、ビューを持つコードがクエリされるたびに再コンパイルされると言っていますか?それは絶対に真実ではないからです(少なくともOracleとSQL Serverではそうです)。ビューの使用は、ストアドプロシージャよりも効率的なクエリを得るための柔軟性の高い方法です。オプティマイザは、使用方法によってビューを再最適化できるためです。一度実行すれば、クエリプランはキャッシュされ、再コンパイルする必要はありません。ポイントのケース:あなたは、このビューを作成します。
あなたは、あなたはすべての顧客のリストはジョン・スミスという名前たいことを決定:
SELECT c.CustomerID
FROM myOrders
WHERE c.LastName = 'Smith' AND c.FirstName = 'John';
それはビューなので、「受注」への参加を取得離れて最適化。ストアドプロシージャでこれをモジュール化しようとしましたが、できませんでした。あなたはおそらく目的のために別のsprocを作る必要があります。そしてもうすぐあなたはあなたが持っている問題に終わりますが、それはやや保守的なprocsのトンです。
なぜストアドプロシージャを使用していますか?あなたが解決しようとしている問題は何ですか?カプセル化?私は、SELECTの場合、UDFがより有用であると主張します。私はまた、中間層のLINQ型問合せがさらに柔軟性があると主張します。ストアドプロシージャを使用してパフォーマンスを最適化しようとしていますか?その場合は、実行するすべてのアドホッククエリが最適化されキャッシュされることを理解してください。SQL Server 2005+を使用している場合、パラメータを明示的に指定しなくても、クエリプランをパラメータ化してキャッシュすることさえ可能です。
ストアドプロシージャにはその場所がありますが、保守性、使用の柔軟性、およびパフォーマンスの面での欠点は、慎重に使用する必要があることを意味します。
ストアドプロシージャは、現在、一般的なプラクティスが可能な限り避ける理由を維持することは難しいです。 – Ray
ストアドプロシージャは、さまざまなテクノロジを使用してデータベースにアクセスするさまざまな異なるクライアントよりも保守が非常に簡単です。あなたの会社が5年以上になると後は避けられません。 – Andomar
Oracleは、ファンクションおよびプロシージャを論理的にグループ化するために使用されるパッケージをサポートしています。トレードオフは、細分化された(機能または手順)ベースでアクセスを許可する能力が不足していることです。 –