10bet网址
MySQL 5.6リファレンスマニュアル
本手册下载
PDF (Ltr)- 26.8 mb
PDF (A4)- 26.8 mb
HTML下载(TGZ)- 7.2 mb
HTML下载(邮政编码)- 7.2 mb


20.1ストアドプログラムの定義

各ストアドプログラムには,sqlステトメントから構成される本体が含まれます。このステトメントは,セミコロン()文字で区切られた複数のステトメントから構成される複合ステトメントの場合があります。たとえば,次のストアドプロシ,ジャ,には,ステトメントと重复ルプ(ルプ自体に別の)ステトメントが含まれます)を含む开始……结束ブロックから構成される本体があります。

CREATE PROCEDURE dorepeat(p1 INT) BEGIN SET @x = 0;@x = @x + 1;直到@x > p1结束重复;结束;

mysqlクライアントプログラムを使用してセミコロン文字を含むストアドプログラムを定義すると,問題が発生します。デフォルトでは,mysql自体はセミコロンをステトメント区切り文字と認識します。したがって,mysqlがストアドプログラム定義全体をサバに渡すように,区切り文字を一時的に再定義する必要があります。

mysqlの区切り文字を再定義するには,分隔符コマンドを使用します。次の例は,上記のdorepeat ()プロシジャに。区切り文字は//に変更され,定義全体を単一のステトメントとしてサバに渡して,プロシの呼び出し前ににリストアできます。これにより,プロシジャ本体で使用される区切り文字を,mysql自体が解釈するのではなく,サバに渡すようにすることができます。

mysql> delimiter // mysql> CREATE PROCEDURE dorepeat(p1 INT) -> BEGIN -> SET @x = 0;-重复设置@x = @x + 1;直到@x > p1结束重复;-> END -> //查询OK, 0 rows affected (0.00 sec) mysql> delimiter;mysql >调用dorepeat (1000);查询OK, 0行影响(0.00 sec) mysql> SELECT @x;+------+ | @ x  | +------+ | 1001年  | +------+ 1行集(0.00秒)

区切り文字を//以外の文字列に再定義でき,区切り文字は単一の文字から構成することも,複数の文字から構成することもできます。バックスラッシュ()文字は,MySQLのエスケプ文字なので使用しないでください。

次に,パラメ,タを受け取り,sql関数を使用して操作を実行したあと,結果を返す関数例を示します。この場合は,関数定義に内部のステトメント区切り文字が含まれていないため,分隔符を使用する必要はありません。

mysql> CREATE FUNCTION hello (s CHAR(20)) -> RETURN CONCAT(' hello,',s,'!');查询OK, 0 rows affected (0.00 sec) mysql> SELECT hello('world');+----------------+ | 你好(“世界上 ') | +----------------+ | 你好,世界!| +----------------+ 1 row in set (0.00 sec)