MySQLで「BEGIN」と「END」なしのストアドプロシージャを作成する方法
MySQLでは、BEGIN と END を使わずにストアドプロシージャを作成することができます。作成手順はこれらのキーワードを使用する場合と基本的に同じで、単に 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 を記述しなくても簡単に作成・実行できます。
-
MySQLでシーケンス(連番)を作成・使用する方法をわかりやすく解説
MySQLにはOracleやPostgreSQLのような独立したシーケンスオブジェクトは存在しませんが、カラムにAUTO_INCREMENT属性を設定することで、同じ機能を簡単に実現できます。レコードを挿入するたびに、初期値1から始まり、1ずつ自動的に増加する連番が割り当てられます。 1. シーケンス用テーブルの作成 まず、CREATE TABLE文を使って、AUTO_INCREMENT属性を持つカラムを含むテーブルを作成します。主キーとして設定するのが一般的です。 mysql> CREATE table SequenceDemo -> ( -> SequenceId in
-
MySQLでユーザーに全ストアドプロシージャへのアクセス権限を付与する方法
MySQLですべてのストアドプロシージャへのアクセス権限をユーザーに許可する手順MySQLでは、GRANT EXECUTE 構文を使用することで、特定のユーザーに対してデータベース内のすべてのストアドプロシージャ(およびストアドファンクション)を実行する権限を簡単に付与できます。ここでは、その具体的な手順を順を追って解説します。ステップ1:現在登録されているユーザーの確認まず、mysql.user テーブルから既存のユーザーとホストの一覧を表示して確認しましょう。mysql> SELECT user, host FROM mysql.user;このクエリを実行すると、次のような出力が得ら