MySQLストレージ・プロシージャの基本的な使い方

3358 ワード

外部プログラムがデータベースにアクセスする場合(PHPなど)、多くのSQL文を整理します.
特にビジネスロジックが複雑な場合、大量のSQLと条件がPHPコードに混ざっていて、ぞっとします.MySQLストレージ・プロシージャが導入され、ビジネス・ロジックはストレージ・プロシージャをカプセル化し、メンテナンスが容易になるだけでなく、実行効率も向上します.
一、MySQLストレージプロセスの作成
pr_addは、intタイプの入力パラメータ「a」、「b」の2つのパラメータの和を返す簡単なMySQLストレージ・プロシージャです.
 
  
drop procedure if exists pr_add;

2つの数の和を計算する
 
  
create procedure pr_add
(
a int,
b int
)
begin
declare c int;
if a is null then
set a = 0;
end if;
if b is null then
set b = 0;
end if;
set c = a + b;
select c as sum;
/*
return c;
MySQL 。return 。

*/
end;

二、MySQLストレージプロセスの呼び出し
 
  
call pr_add(10, 20);

MySQLストアド・プロシージャを実行します.ストアド・プロシージャ・パラメータはMySQLユーザー変数です.
 
  
set @a = 10;
set @b = 20;
call pr_add(@a, @b);

三、MySQLストレージプロセスの特徴
MySQLストアド・プロシージャを作成する簡単な構文は、次のとおりです.
 
  
create procedure ()
(
[in|out|inout] datatype
)
begin
MySQL ;
end;

MySQLストアド・プロシージャ・パラメータ「in」、「out」、「inout」を明示的に指定しない場合、デフォルトは「in」です.習慣的に、inのパラメータについては、明示的に指定しません.
1.MySQLストアド・プロシージャの名前の後にある「()」は必須で、パラメータが1つもなくても「()」が必要です.
2.MySQLはプロシージャパラメータを格納し、パラメータ名の前に「@a int」などの「@」を付けることはできません.次の作成ストアド・プロシージャ構文はMySQLでは正しくありません(SQL Serverでは正しい).MySQLストレージ中の変数は、変数名の前に「@」を付ける必要はありません.MySQLクライアントのユーザー変数には「@」を付ける必要がありますが.
 
  
create procedure pr_add
(
@a int, --
b int --
)

3.MySQLストアド・プロシージャのパラメータはデフォルト値を指定できません.
4.MySQLストレージ・プロシージャは、procedure bodyの前に「as」を追加する必要はありません.SQL Serverストレージ・プロシージャには、「as」キーを付ける必要があります.
 
  
create procedure pr_add
(
a int,
b int
)
as -- ,MySQL "as"
begin
mysql statement ...;
end;

5.MySQLストレージに複数のMySQL文が含まれている場合は、begin endキーが必要です.
 
  
create procedure pr_add
(
a int,
b int
)
begin
mysql statement 1 ...;
mysql statement 2 ...;
end;

6.MySQLストレージ中の各文の末尾には、セミコロン";"
 
  
...
declare c int;
if a is null then
set a = 0;
end if;
...
end;

7.MySQLストレージ中のコメント.
 
  
/*

MySQL 。
*/
declare c int; -- MySQL ( -- )
if a is null then # MySQL
set a = 0;
end if;
...
end;

8.MySQLストレージで「return」キーを使用できません.
 
  
set c = a + b;
select c as sum;
/*
return c; -- MySQL 。return 。
*/
end;

9.MySQLストアド・プロシージャを呼び出す場合は、プロシージャ名の後に「()」を付ける必要があります.パラメータが1つもなくても「()」を付ける必要があります.
 
  
call pr_no_param();

10.MySQLストアド・プロシージャ・パラメータにデフォルト値がないため、MySQLストアド・プロシージャを呼び出す際にパラメータを省略することはできません.nullで代用できます.