MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLで「BEGIN」と「END」なしのストアドプロシージャを作成する方法

MySQLでは、BEGINEND を使わずにストアドプロシージャを作成することができます。作成手順はこれらのキーワードを使用する場合と基本的に同じで、単に BEGIN と END を省略するだけで構いません。

なお、BEGIN〜END のブロックが必須となるのは、プロシージャ内に複数のSQLステートメントを記述する場合です。SELECT文のように処理が1つのステートメントだけで完結するのであれば、省略しても問題なく動作します。

作成例

以下の例では、Student_info テーブルからすべての行を取得するストアドプロシージャを、BEGIN と END を使わずに作成しています。

mysql> DELIMITER //
mysql> CREATE PROCEDURE Hello()
    -> SELECT * FROM Student_info; //
Query OK, 0 rows affected (0.08 sec)

このように、BEGIN と END を省略した状態でも、ストアドプロシージャは正常に作成されます。

プロシージャの呼び出し方法

次に、デリミタを元に戻し、CALL ステートメントを使って作成したプロシージャを呼び出してみましょう。

mysql> DELIMITER ;

mysql> CALL Hello();
+-----+---------+------------+------------+
| id  | Name    | Address    | Subject    |
+-----+---------+------------+------------+
| 101 | YashPal | Amritsar   | History    |
| 105 | Gaurav  | Chandigarh | Literature |
| 125 | Raman   | Shimla     | Computers  |
+-----+---------+------------+------------+
3 rows in set (0.18 sec)
Query OK, 0 rows affected (0.28 sec)

実行結果として、テーブル内の3件のレコードが正しく表示されました。このように、単一のステートメントで構成されるストアドプロシージャであれば、BEGIN と END を記述しなくても簡単に作成・実行できます。

  1. MySQLでシーケンス(連番)を作成・使用する方法をわかりやすく解説

    MySQLにはOracleやPostgreSQLのような独立したシーケンスオブジェクトは存在しませんが、カラムにAUTO_INCREMENT属性を設定することで、同じ機能を簡単に実現できます。レコードを挿入するたびに、初期値1から始まり、1ずつ自動的に増加する連番が割り当てられます。 1. シーケンス用テーブルの作成 まず、CREATE TABLE文を使って、AUTO_INCREMENT属性を持つカラムを含むテーブルを作成します。主キーとして設定するのが一般的です。 mysql> CREATE table SequenceDemo -> ( -> SequenceId in

  2. MySQLでユーザーに全ストアドプロシージャへのアクセス権限を付与する方法

    MySQLですべてのストアドプロシージャへのアクセス権限をユーザーに許可する手順MySQLでは、GRANT EXECUTE 構文を使用することで、特定のユーザーに対してデータベース内のすべてのストアドプロシージャ(およびストアドファンクション)を実行する権限を簡単に付与できます。ここでは、その具体的な手順を順を追って解説します。ステップ1:現在登録されているユーザーの確認まず、mysql.user テーブルから既存のユーザーとホストの一覧を表示して確認しましょう。mysql> SELECT user, host FROM mysql.user;このクエリを実行すると、次のような出力が得ら