ストアドプロシージャとは何ですか?どのように機能しますか?ストアドプロシージャの構成要素(ストアドプロシージャであるために必要なもの)は何ですか?
ストアドプロシージャは、いくつかの方法で実行可能なSQL文のバッチです。ほとんどの主要DBMSはストアド・プロシージャをサポートしていますが、すべてのDBMSがサポートしているわけではありません。詳細については、各DBMSのヘルプドキュメントで確認する必要があります。私はSQL Serverに最も精通しているので、ここではSQL Serverをサンプルとして使用します。
ストアドプロシージャを作成するための構文はとても簡単です。
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
ストアドプロシージャの利点は、データアクセスロジックを一箇所に集中させることができ、DBA'の最適化が容易になることです。ストアドプロシージャにはセキュリティ上の利点もあり、ストアドプロシージャに実行権限を与えることができますが、そのユーザーは基礎となるテーブルに対する読み取り/書き込み権限を持つ必要はありません。これは、SQLインジェクションに対する最初の対策として有効です。
ストアドプロシージャには欠点があります。基本的には、基本的なCRUD操作に伴うメンテナンスです。例えば、各テーブルにInsert、Update、Delete、そして少なくとも1つの主キーに基づいたselectがあるとすると、各テーブルには4つのプロシージャがあることになります。400のテーブルからなるそこそこの規模のデータベースでは、1600のプロシージャが必要になります。重複していないと仮定した場合ですが、おそらく重複するでしょう。
ここで、ORMやその他の方法を使って、基本的なCRUD操作を自動生成することには大きなメリットがあります。
ストアドプロシージャとは、特別なタスクを実行するために使用される、プリコンパイルされたSQL文のセットです。
例もしEmployee
テーブルがあって
Employee ID Name Age Mobile
---------------------------------------
001 Sidheswar 25 9938885469
002 Pritish 32 9178542436
まず、Employee
テーブルを取得します。
Create Procedure Employee details
As
Begin
Select * from Employee
End
このプロシージャをSQL Server上で実行するために
Execute Employee details
--- (Employee details is a user defined name, give a name as you want)
次に、Employee テーブルに値を挿入します。
Create Procedure employee_insert
(@EmployeeID int, @Name Varchar(30), @Age int, @Mobile int)
As
Begin
Insert Into Employee
Values (@EmployeeID, @Name, @Age, @Mobile)
End
SQL Server上でパラメトリック・プロシージャを実行するには、次のようにします。
Execute employee_insert 003,’xyz’,27,1234567890
--(Parameter size must be same as declared column size)
例: @Name Varchar(30)
.
Employeeテーブルの
Nameカラム'のサイズは
varchar(30)`でなければなりません。
一般的にストアドプロシージャは、「SQL関数」と呼ばれています。
-- a name
CREATE PROCEDURE spGetPerson
-- parameters
CREATE PROCEDURE spGetPerson(@PersonID int)
-- a body
CREATE PROCEDURE spGetPerson(@PersonID int)
AS
SELECT FirstName, LastName ....
FROM People
WHERE PersonID = @PersonID
これはT-SQLに焦点を当てた例です。ストアドプロシージャは、ほとんどのSQL文を実行でき、スカラ値やテーブルベースの値を返すことができ、SQLインジェクション攻撃を防ぐことができるため、より安全であると考えられています。