ストアドプロシージャと関数の主な違いは、ストアドプロシージャがRDBMS上で何度も実行できるSQL文の集合であるのに対し、関数は何度も実行できるプログラミング言語を使って書かれた命令の集合である点です。
リレーショナルデータベース管理システム(RDBMS)は、リレーショナルモデルに基づくデータベース管理システムです。
RDBMSは、データをデータベースに格納する。
各データベースは複数のテーブルで構成され、それらは互いに関連している。
RDBMS は、データベース内のデータの保存、操作、検索を容易にするのに役立ちます。
ストアドプロシージャは RDBMS 上で使用できます。
これは、再利用可能な SQL 文のセットです。
一方、関数はプログラミング言語で書かれた、特定のタスクを実行するための再利用可能な命令のセットです。
C、C++、Python、Java、PHP、Perlなどのプログラミング言語では、プログラマーは関数を作成することができます。
ストアドプロシージャとは
ストアドプロシージャとは、RDBMS上でタスクを実行するための一連のSQL命令です。
もし、再利用すべきSQLクエリのセットがあれば、プログラマはストアドプロシージャを作成することができます。
そして、それを呼び出して実行することができます。
また、ストアドプロシージャにパラメータを渡して、タスクを実行することも可能です。
図1: ストアドプロシージャ
ストアドプロシージャの文法は以下の通りです。
CREATE PROCEDURE procedure_name
AS
SQL文
GO;
このプロシージャを実行するには、次のクエリを使用します。
EXEC procedure_name;
次の SQL 文は、ストアドプロシージャ名「SelectStudents」を作成します。
これは、Student テーブルにあるすべての学生のレコードを選択します。
CREATE PROCEDURE SelectStudents(プロシージャ名:SelectStudents
として
SELECT * FROM Students
GO;
ストアドプロシージャは、以下のコマンドで実行できます。
EXEC SelectStudents;
ストアドプロシージャは、パラメータを受け取ることもできます。
以下のSQLステートメントは、Studentテーブルから指定された名前のStudentを選択するストアド プロシージャを作成します。
CREATE PROCEDURE SelectStudents @Name varchar(50)
AS
SELECT * FROM Students WHERE Name = @Name
を実行します。
このプロシージャを実行するには、次のステートメントを使用します。
EXEC SelectStudents Name=”Ann”。
Studentテーブルで名前 “Ann “を持つすべての生徒を選択します。
機能とは
関数とは、特定のタスクを実行するための命令の集合体です。
C++、C、Java、Pythonなど、ほとんどすべてのプログラミング言語では、プログラマーは関数を書くことができます。
関数を使うと、同じ命令セットを何度も再利用することができます。
さらに、コード全体を整理することもできます。
関数は次のような構文で記述します。
return_type function_name (parameter list){ 関数名 (パラメータリスト)
//関数内部のステートメント
}
関数には、パラメータを受け付けるものと受け付けないものがあります。
以下の関数を参照してください。
void displayMessage(){
prinf(“Hello World n”);
}
上記は単純なCの関数です。
パラメータはありません。
Hello World “というメッセージをコンソールに表示するだけです。
この関数は値を返しません。
したがって、戻り値の型は void です。
関数は、パラメータを受け取ることもできます。
次の例を参照してください。
int calArea(int width, int length){ 面積 = width ┣長さ(mm)
int area = width * length;
面積を返します。
}
上記はcalAreaという関数です。
widthとlengthという2つの整数のパラメータを取得します。
関数内部で “area “というローカル変数が作成されます。
この変数には、2つの値の掛け算が代入される。
最後に、計算された面積が返される。
これは整数です。
したがって、戻り値の型はintです。
ストアドプロシージャと関数の違い
定義
ストアドプロシージャとは、リレーショナルデータベース管理システム上で特定のタスクを実行することができるSQL文のグループです。
関数は、特定のタスクを実行する自己完結型のコードモジュールです。
使用方法
なお、ストアドプロシージャはRDBMSで使用され、関数はC、C++、Javaなどあらゆるプログラミング言語で使用されます。
結論
ストアドプロシージャと関数の違いは、ストアドプロシージャはRDBMS上で何度でも実行できるSQL文の集合であり、関数は何度でも実行できるプログラミング言語で書かれた命令の集合であるということです。
簡単に言うと、ストアドプロシージャは再利用可能なSQL文のセットであり、関数はプログラミング言語を使って書かれた再利用可能な命令のセットです。