MySQL はストアド プロシージャを作成します (CREATE PROCEDURE)

MySQL ストアド プロシージャは、いくつかの SQL ステートメントの集合です。たとえば、場合によっては、大規模な一連の SQL ステートメントが必要になる場合や、SQL ステートメントを作成するプロセスでいくつかの変数値を設定する必要がある場合があります。現時点では、それは絶対に必要です。ストアド プロシージャを作成するために必要です。

ストアド プロシージャを作成するのは簡単ではありませんが、ストアド プロシージャを使用すると、操作が簡素化され、冗長な操作手順が削減され、同時に操作中のエラーが減り、効率が向上します。そのため、ストアド プロシージャの使用方法をできるだけ学習する必要があります。可能。

ここではストアドプロシージャの作成方法を中心に紹介します。 CREATE PROCEDUREステートメントを使用してストアド プロシージャを作成

できます 。構文は次のとおりです。
CREATE PROCEDURE <过程名> ( [过程参数[,]] ) <过程体>
[过程参数[,]] 格式
[ IN | OUT | INOUT ] <参数名> <类型>

構文は次のように説明されます。

1) 手続き名

ストアド プロシージャの名前。デフォルトで現在のデータベースに作成されます。特定のデータベースにストアド プロシージャを作成する必要がある場合は、名前の前にデータベースの名前を追加します (つまり、db_name.sp_name)。

名前には、MySQL 組み込み関数と同じ名前を選択しないように注意してください。そうしないと、エラーが発生します。

2) プロセスパラメータ

ストアド プロシージャのパラメータのリスト。ここで、 <参数名> はパラメータ名、 <类型> はパラメータのタイプです (任意の有効な MySQL データ タイプを指定できます)。パラメータが複数ある場合は、パラメータリスト内でパラメータをカンマで区切ります。ストアド プロシージャにはパラメータを含めることはできません (ストアド プロシージャの名前の後にかっこを続ける必要があります)、または 1 つ以上のパラメータを含めることもできます。

MySQL ストアド プロシージャは、入力パラメータ、出力パラメータ、入出力パラメータという 3 つのタイプのパラメータをサポートしており、それぞれ IN、OUT、INOUT の 3 つのキーワードで識別されます。このうち、入力パラメータはストアド プロシージャに渡すことができ、出力パラメータはストアド プロシージャが演算結果を返す必要がある場合に使用され、入出力パラメータは入力パラメータと出力パラメータの両方として使用できます。パラメータ。

パラメータの名前はデータ テーブルの列名と同じであってはいけないことに注意してください。同じでない場合、エラー メッセージは返されませんが、ストアド プロシージャの SQL ステートメントはパラメータ名を列名とみなします。 、予測できない結果が生じます。

3) プロセス本体

存储过程的主体部分,也称为存储过程体,包含在过程调用的时候必须执行的 SQL 语句。这个部分以关键字 BEGIN 开始,以关键字 END 结束。若存储过程体中只有一条 SQL 语句,则可以省略 BEGIN-END 标志。

在存储过程的创建中,经常会用到一个十分重要的 MySQL 命令,即 DELIMITER 命令,特别是对于通过命令行的方式来操作 MySQL 数据库的使用者,更是要学会使用该命令。

在 MySQL 中,服务器处理 SQL 语句默认是以分号作为语句结束标志的。然而,在创建存储过程时,存储过程体可能包含有多条 SQL 语句,这些 SQL 语句如果仍以分号作为语句结束符,那么 MySQL 服务器在处理时会以遇到的第一条 SQL 语句结尾处的分号作为整个程序的结束符,而不再去处理存储过程体中后面的 SQL 语句,这样显然不行。

为解决以上问题,通常使用 DELIMITER 命令将结束命令修改为其他字符。语法格式如下:
DELIMITER $$

语法说明如下:

  • $$ 是用户定义的结束符,通常这个符号可以是一些特殊的符号,如两个“?”或两个“¥”等。
  • 当使用 DELIMITER 命令时,应该避免使用反斜杠“\”字符,因为它是 MySQL 的转义字符。

在 MySQL 命令行客户端输入如下 SQL 语句。
mysql> DELIMITER ??

成功执行这条 SQL 语句后,任何命令、语句或程序的结束标志就换为两个问号“??”了。



若希望换回默认的分号“;”作为结束标志,则在 MySQL 命令行客户端输入下列语句即可:

mysql> DELIMITER ;

注: DELIMITER とセミコロン「;」の間にはスペースが必要ですストアド プロシージャを作成する場合は、CREATE ROUTINE 権限が必要です。

例 1

ShowStuScore という名前のストアド プロシージャを作成します。このストアド プロシージャの機能は、学生の成績情報テーブルから学生の成績情報をクエリすることです。入力した SQL ステートメントと実行プロセスは次のとおりです。
mysql> DELIMITER //
mysql> CREATE PROCEDURE ShowStuScore()
    -> BEGIN
    -> SELECT * FROM tb_students_score;
    -> END //
Query OK, 0 rows affected (0.09 sec)

結果は、ShowStuScore ストアド プロシージャが正常に作成されたことを示しています。

例 2

学生名を入力パラメータとして GetScoreByStu という名前のストアド プロシージャを作成します。ストアドプロシージャの機能は、入力された学生名を介して、学生成績情報テーブルから指定された学生の成績情報を問い合わせることであり、入力したSQL文と実行処理は以下のとおりです。
mysql> DELIMITER //
mysql> CREATE PROCEDURE GetScoreByStu
    -> (IN name VARCHAR(30))
    -> BEGIN
    -> SELECT student_score FROM tb_students_score
    -> WHERE student_name=name;
    -> END //
Query OK, 0 rows affected (0.01 sec)

おすすめ

転載: blog.csdn.net/weixin_56175092/article/details/130370485