ストアドプロシージャは、いくつかの方法で実行できるSQLステートメントのバッチです。ほとんどの主要なDBMは、ストアドプロシージャをサポートしています。ただし、すべてがそうであるわけではありません。詳細については、特定のDBMSヘルプドキュメントで確認する必要があります。私はSQLServerに最も精通しているので、それをサンプルとして使用します。
ストアドプロシージャを作成するための構文はかなり単純です:
CREATE PROCEDURE <owner>.<procedure name>
<Param> <datatype>
AS
<Body>
たとえば:
CREATE PROCEDURE Users_GetUserInfo
@login nvarchar(30)=null
AS
SELECT * from [Users]
WHERE ISNULL(@login,login)=login
ストアドプロシージャの利点は、データアクセスロジックを1つの場所に一元化できることです。これにより、DBAは簡単に最適化できます。ストアドプロシージャには、ストアドプロシージャに実行権限を付与できるというセキュリティ上の利点もありますが、ユーザーは基になるテーブルに対する読み取り/書き込み権限を持っている必要はありません。これはSQLインジェクションに対する良い第一歩です。
ストアドプロシージャには欠点があります。基本的には、基本的なCRUD操作に関連するメンテナンスです。テーブルごとに、挿入、更新、削除があり、主キーに基づいて少なくとも1つの選択があるとします。つまり、各テーブルには4つのプロシージャがあります。今度は400テーブルのまともなサイズのデータベースを取り、1600の手順があります!そして、それはおそらくあなたがそうするであろう重複がないことを前提としています。
これは、ORMまたはその他の方法を使用して基本的なCRUD操作を自動生成することには、多くのメリットがある場合です。