|
||||||||||||||||||
| 前のページ 1 2 3 次のページ | ||||||||||||||||||
| MySQLのストアドプロシージャ | ||||||||||||||||||
|
前述した通り、MySQLのストアドプロシージャには、ストアドファンクションとストアドプロシージャの2種類があります。この2種類を総称して「ストアドルーチン」と呼ぶこともあります。ストアドファンクションとストアドプロシージャには、大きく分けて2つの違いがあります。 1つは処理結果の値を呼び出し元へ返却するための記述方法の違いです。ストアドファンクションは、RETURNS句を使いますが、ストアドプロシージャはパラメータのIN、OUT、INOUT句を使用します。 ストアドファンクションを作成する際のCREATE句の抜粋は以下のようになります。
create function ファンクション名 () returns varchar(10)
また、ストアドプロシージャを作成する際のCREATE句の抜粋は以下のようになります。
create procedure プロシージャー名 (out para varchar(10))
もう1つの違いは、呼び出し方法です。ストアドファンクションはPostgreSQLのユーザ定義関数と同様にSELECTなどのSQL文の中に組み込んで呼び出しますが、ストアドプロシージャはCALL文を使用して呼び出します。 |
||||||||||||||||||
| ストアドプロシージャの具体例 | ||||||||||||||||||
|
ではここで、同一処理内容のストアドプロシージャをPostgreSQLのユーザ定義関数、MySQLのストアドファンクション、ストアドプロシージャのそれぞれで作成した例を説明します。なお、PostgreSQLのユーザ定義関数はPL/pgSQLにて作成することとします。 まず、処理対象のテーブルとして図1のようにTABLE01があり、COL01とCOL02の2つのカラムを用意します。 ![]() 図1:処理対象テーブルの状態 各カラムの初期状態は図1にある通りで、COL02の値がすべて「100」の4レコードを格納しているものとします。このTABLE01に対して処理を行うストアドプロシージャとして、以下のような内容のものを作成します。 作成するストアドプロシージャは、名称を「sp_test()」とし、char型の入力パラメータを1つ持ちます。sp_test()は、まず与えられたパラメータ値をTABLE01のCOL01の条件値として使用し、該当するレコードを検索します。 検索結果が0件の場合は、COL01=入力パラメータ値、COL02=0としたレコードを1件挿入します。1件でも該当するレコードが存在した場合は、そのレコードのCOL02の値を0に更新します。そして、レコードを挿入した場合は'INSERT'という文字列を、レコードを更新した場合は'UPDATE'という文字列を返却値としてsp_test()は終了します。 この内容で3種類のsp_test()を作成します。 まず、以下はPostgreSQLのユーザ定義関数で記述したものです。
create function sp_test (para01 char) returns varchar(10)
続いて、MySQLのストアドファンクションで作成したものです。
create function sp_test (para01 char) returns varchar(10)
最後は、MySQLのストアドプロシージャで作成したものです。
create procedure sp_test (in para01 char,out para02 varchar(10))
いかがでしょうか。この程度の処理内容だと3種類とも、ほとんど同じ内容にみえると思います。しかし、いくつか特徴的な違いもありますのでその部分について説明します。 |
||||||||||||||||||
|
前のページ 1 2 3 次のページ |
||||||||||||||||||
|
|
||||||||||||||||||
|
|
||||||||||||||||||
|
||||||||||||||||||
|
|
||||||||||||||||||
|
||||||||||||||||||
|
|
||||||||||||||||||
|
||||||||||||||||||


