MySQLストアドプロシージャで一時テーブル(TEMPORARY TABLE)を作成する方法
MySQLストアドプロシージャで一時テーブルを作成する基本構文
MySQLのストアドプロシージャ内で一時テーブル(TEMPORARY TABLE)を作成する場合、基本となる構文は以下の通りです。
CREATE PROCEDURE yourProcedureName()
BEGIN
CREATE TEMPORARY TABLE yourTemporaryTableName SELECT yourValue;
ENDストアドプロシージャの作成例
それでは、実際にこの構文を使って一時テーブルを作成し、テーブルにレコードを挿入してみましょう。まずは、一時テーブルを作成するストアドプロシージャを定義するクエリです。
mysql> DELIMITER //
mysql> CREATE PROCEDURE create_Temporary_Table()
-> BEGIN
-> CREATE TEMPORARY TABLE tmpDemoTable SELECT 500;
-> END//
Query OK, 0 rows affected (0.15 sec)このプロシージャでは、SELECT文の結果をもとに「tmpDemoTable」という名前の一時テーブルを作成しています。続いて、作成した一時テーブルにレコードを挿入するためのストアドプロシージャを定義しましょう。
mysql> CREATE PROCEDURE insert_Record_InTempTable()
-> BEGIN
-> INSERT INTO tmpDemoTable VALUES (300);
-> END//
Query OK, 0 rows affected (0.06 sec)プロシージャの定義が完了したら、デリミタを元の「;」に戻しておきます。
mysql> DELIMITER ;
ストアドプロシージャの呼び出しと実行
準備が整ったら、CALL文を使って上記のストアドプロシージャを呼び出し、一時テーブルの作成とレコードの挿入を実行します。
mysql> call create_Temporary_Table(); Query OK, 1 row affected (0.00 sec) mysql> call insert_Record_InTempTable(); Query OK, 1 row affected (0.00 sec)
最後に、SELECT文を使ってテーブル内のすべてのレコードを表示して確認しましょう。
mysql> select * from tmpDemoTable;
実行結果
上記のクエリを実行すると、次のような出力が得られます。
+-----+ | 500 | +-----+ | 500 | | 300 | +-----+ 2 rows in set (0.00 sec)
一時テーブルのポイント
MySQLの一時テーブルには以下のような特徴があります。
- セッション固有のテーブルであり、他の接続からは参照できません。
- セッションが終了すると自動的に削除されるため、明示的にDROPする必要が基本的にはありません。
- 複雑なクエリの中間結果を一時的に保存したい場合などに便利です。
なお、同じセッション内で同名の一時テーブルを再度作成しようとするとエラーになるため、必要に応じて「DROP TEMPORARY TABLE IF EXISTS テーブル名;」を事前に実行しておくと安全です。
-
MySQLストアドプロシージャでテーブルにデータを挿入する方法
MySQLのストアドプロシージャを使ってテーブルにデータを挿入するには、以下のような構文を使用します。create procedure yourProcedureName(OptionalParameter) begin insert into yourTableName() values(yourValue1,yourValue2,...N); endサンプルテーブルの作成まずは、この構文を実際に理解するために、テスト用のテーブルを作成してみましょう。mysql> create table DemoTable1928 ( Id int NOT NULL
-
MySQLストアドプロシージャでSHOW CREATE TABLEを実行する方法
MySQLストアドプロシージャでSHOW CREATE TABLEを実行する方法 ストアドプロシージャの中でSHOW CREATE TABLEを実行したい場合は、動的SQL(プリペアドステートメント)を利用します。SHOW系のコマンドはプロシージャ内に直接記述できないため、SQL文を文字列として組み立てて実行するのがポイントです。 まずはサンプル用のテーブルを作成しましょう。 mysql> create table DemoTable2011 -> ( -> StudentId int NOT NULL AUTO_INCREMENT, -> St