MySQL ストアド プロシージャは、コンパイルされてデータベースに保存される一連の SQL ステートメントであり、繰り返し呼び出すことができます。ストアド プロシージャは、パラメーターを受け取り、一連の操作を実行し、複数の方法で結果を返すことができます。この記事では主にMySQLストアドプロシージャの結果セットを紹介します。
1. MySQL ストアド プロシージャの結果セット
MySQL ストアド プロシージャの結果セットは、次のいずれかの方法で返すことができます:
ストアド プロシージャは、RETURN ステートメントを使用して、整数、浮動小数点数、日付、時刻、文字列などの値を返すことができます。ストアド プロシージャが結果を返さない場合は、RETURN ステートメントを使用してストアド プロシージャの実行を終了できます。
たとえば、次のストアド プロシージャは 2 つの入力パラメータの積を返します。
CREATE PROCEDURE myProc(IN a INT, IN b INT) BEGIN DECLARE result INT; SET result = a * b; RETURN result; END;
ストアド プロシージャは OUT パラメータを使用して、次のことを行うことができます。 1 つ以上の値を返します。 OUT パラメータはストアド プロシージャのパラメータ リストで宣言し、ストアド プロシージャ内で割り当てる必要があります。ストアド プロシージャが終了すると、呼び出し元はこれらの値を取得できます。
たとえば、次のストアド プロシージャは 2 つの入力パラメータの合計と差を返します。
CREATE PROCEDURE myProc(IN a INT, IN b INT, OUT sum INT, OUT difference INT) BEGIN SET sum = a + b; SET difference = a - b; END;
ストアド プロシージャでは、 SELECT ステートメントを使用して、1 つまたは複数の結果セットを返します。結果セットには 1 つ以上のデータ行を含めることができ、各行は一連のフィールドで構成されます。
たとえば、次のストアド プロシージャは、Employee テーブル内のすべての従業員情報を返します。
CREATE PROCEDURE myProc() BEGIN SELECT * FROM Employee; END;
ストアド プロシージャでは、SET ステートメントを使用できます。ユーザー変数を返すステートメント。ユーザー変数には、整数、浮動小数点数、日付、文字列など、あらゆる種類の値を格納できます。
たとえば、次のストアド プロシージャは、Employee テーブル内の従業員名を返します:
CREATE PROCEDURE myProc(IN employeeID INT, OUT employeeName VARCHAR(255)) BEGIN SELECT name INTO @employeeName FROM Employee WHERE ID = employeeID; SET employeeName = @employeeName; END;
2. MySQL ストアド プロシージャによる結果セットの処理方法
ストアド プロシージャは、結果セットを処理するには、次のメソッドを使用します。
ストアド プロシージャは、ループを使用して結果セット内のデータの各行を走査し、データを処理できます。
たとえば、次のストアド プロシージャは、Employee テーブル内のすべての従業員名を返します。
CREATE PROCEDURE myProc() BEGIN DECLARE employeeName VARCHAR(255); DECLARE done INT DEFAULT FALSE; DECLARE cur CURSOR FOR SELECT name FROM Employee; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; OPEN cur; get_employee: LOOP FETCH cur INTO employeeName; IF done THEN LEAVE get_employee; END IF; SELECT employeeName; END LOOP; CLOSE cur; END;
ストアド プロシージャは、カーソルを使用して次のことを行うことができます。データの各行の結果セットを走査し、データを処理します。
たとえば、次のストアド プロシージャは、Employee テーブル内のすべての従業員名を返します。
CREATE PROCEDURE myProc() BEGIN DECLARE employeeName VARCHAR(255); DECLARE cur CURSOR FOR SELECT name FROM Employee; OPEN cur; get_employee: LOOP FETCH cur INTO employeeName; IF done THEN LEAVE get_employee; END IF; SELECT employeeName; END LOOP; CLOSE cur; END;
ストアド プロシージャは、サブクエリを使用して処理できます。結果セット内の行と列のデータ。サブクエリでは、ストアド プロシージャの結果セットを他のクエリに結合できます。
たとえば、次のストアド プロシージャは、Employee テーブル内のすべての従業員情報を返します:
CREATE PROCEDURE myProc() BEGIN SELECT * FROM Employee WHERE departmentID = ( SELECT ID FROM Department WHERE name = 'Sales' ); END;
3. MySQL ストアド プロシージャの結果セットの最適化
ストアド プロシージャは、結果セットの処理を最適化するには、次のテクニックを使用します。
ストアド プロシージャはインデックスを使用して、結果セットのクエリを高速化できます。 MySQL は、B ツリー、ハッシュ、フルテキスト インデックスを含む複数のインデックス タイプをサポートしています。
たとえば、次のストアド プロシージャでは、Employee テーブルの ID フィールドを使用してインデックスを作成できます:
CREATE INDEX idx_employee ON Employee(ID);
ストアド プロシージャでは、LIMIT ステートメントを使用して結果セットの数を制限できます。これにより、ストアド プロシージャの実行時間とメモリ フットプリントを削減できます。
たとえば、次のストアド プロシージャでは、LIMIT ステートメントを使用して最初の 10 人の従業員の情報を返すことができます。
CREATE PROCEDURE myProc() BEGIN SELECT * FROM Employee LIMIT 10; END;
ストアド プロシージャはメモリ テーブルを使用して一時的な結果セットを作成できます。インメモリ テーブルは一般にディスク テーブルよりも高速ですが、ディスク テーブルよりも多くのメモリ領域を消費します。
たとえば、次のストアド プロシージャでは、メモリ エンジンを使用して一時的な結果セットを作成できます:
CREATE TEMPORARY TABLE tempEmployee ENGINE=MEMORY SELECT * FROM Employee;
以上がMySQL ストアド プロシージャの結果セットの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。