MySQLでのストアドプロシージャの呼び出し
MySQL内でストアドプロシージャを呼び出すには、次のcall
メソッドを使います。
call books.proc(@a); select @a;
MySQLでのストアドファンクションの作成
ファンクション(すなわち関数)を作成するときは、ストアドプロシージャとの次の違いに注意してください。
- キーワード
procedure
をキーワードfunction
に置き換える - すべて
IN
パラメータなので、パラメータの方向を指定する必要はない - パラメータリストに続け、キーワード
RETURNS
で戻り値の型を指定する BEGIN...END
ブロックは必要ない- 関数を呼び出すには、構文
select function(parameter_list)
を使う
関数を作成する構文は次のとおりです。
CREATE FUNCTION function_name ([function_parameter[,...]]) RETURNS type routine_body
次の例は、計算をして整数値(int
)を返す簡単なストアドファンクションです。
CREATE FUNCTION simple_operation (price int) RETURNS int RETURN price*1000
これをSQL Serverから呼び出すには、次の構文を使います。
SELECT simple_operation(5)
この例の戻り値は5000です。
PHPからストアドプロシージャを呼び出す
PHPからMySQLのストアドプロシージャ/ストアドファンクションを呼び出すには、次のデータベースエクステンションが必要です。
これらのエクステンションをインストールした後、PHPからMySQLのストアドプロシージャ/ストアドファンクションを呼び出すことができます。既に述べたように、MySQLのストアドプロシージャとファンクションは特定のデータベースに関連付けられます。以下の例では、次のSQLステートメントで作成したbooks
データベースを使用します。
create table bookstore (id int not null auto_increment primary key, book varchar(50), author varchar(50), isbn varchar(50), price int);
図1のブックストアテーブル(bookstore
)の設定に用いたSQLステートメントは次のとおりです。
INSERT INTO bookstore (id,book,author,isbn,price) VALUES (1,"Introduction to PHP","Mark User","3334-4424-334-3433",500) INSERT INTO bookstore (id,book,author,isbn,price) VALUES (2,"DHTML and CSS","Teague Sanders","4545-23-23-23-23232",1500) INSERT INTO bookstore (id,book,author,isbn,price) VALUES (3,"Introduction to PHP","Weeling Tom","4334-2323-23233-434",300) INSERT INTO bookstore (id,book,author,isbn,price) VALUES (4," Web design"," Weeling Tom"," 4334-2323-23233-434",600) INSERT INTO bookstore (id,book,author,isbn,price) VALUES (5," PHP 5"," Weeling Tom"," 444-87-67665-678678",600) INSERT INTO bookstore (id,book,author,isbn,price) VALUES (6," JavaServer Pages"," Tick Own"," 897-9898-987-099",800)
図1に、テーブルbookstore
の構造と一部の内容を示します。