MySQL PREPARE文の格納プロシージャ内
MySQLのPREPARE文は、ストアドプロシージャ内でSQL文を動的に準備して実行するために使用されます。構文は次のとおりです。
PREPARE statement_name FROM sql_statement;
statement_nameとは、プリペアドステートメントを指すためにユーザーが定義する識別子、sql_statementとは準備するSQLステートメントです。
PREPARE文は、通常、準備済の文を実行するためのEXECUTE文と一緒に使用され、EXECUTE文には次の構文があります。
EXECUTE statement_name [USING @var1 [, @var2, ...]];
statement_nameはあらかじめ用意しておいた文の名前、@var1、@var2、…はオプション引数で、用意しておいた文に渡す引数に利用します。
以下に、ストアドプロシージャで PREPARE ステートメントおよび EXECUTE ステートメントを使用する方法を示す例を示します:
DELIMITER //
CREATE PROCEDURE dynamic_query()
BEGIN
DECLARE query VARCHAR(200);
DECLARE param INT;
SET param = 1;
SET query = 'SELECT * FROM my_table WHERE id = ?';
PREPARE stmt FROM query;
EXECUTE stmt USING param;
DEALLOCATE PREPARE stmt;
END //
DELIMITER ;
上記の例では、ストアドプロシージャ{dynamic_query}がパラメータ{param}とクエリ文{query}を定義します。PREPARE文によって、ストアドプロシージャはクエリ文を準備し、EXECUTE文によって実行します。最後に、DEALLOCATE PREPARE文を使用して、準備された文を解放します。
注意、PREPARE 文は記憶手続きでのみ使用可能で、通常の SQL 文では使用できません。