MySQL預存程序是一組被編譯和儲存在資料庫中的SQL語句,它們可以被重複呼叫。預存程序可以接受參數,執行一系列操作,並將結果以多個方式傳回。本文主要介紹MySQL預存程序的結果集。
一、MySQL預存程序的結果集
MySQL預存程序的結果集可以透過下列方式之一來傳回:
預存程序可以使用RETURN語句傳回一個值,這個值可以是一個整數、浮點數、日期、時間、字串等等。如果預存程序不傳回任何結果,可以使用RETURN語句來終止預存程序的執行。
例如,以下預存程序傳回兩個輸入參數的乘積:
CREATE PROCEDURE myProc(IN a INT, IN b INT) BEGIN DECLARE result INT; SET result = a * b; RETURN result; END;
預存程序可以使用OUT參數傳回一個或多個值。 OUT參數必須在預存程序的參數清單中聲明,並且必須在預存程序內進行賦值。當預存程序結束後,呼叫者可以檢索這些值。
例如,以下預存程序傳回兩個輸入參數的和與差:
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語句傳回一個或多個結果集。結果集可以包含一行或多行數據,每一行由一組欄位組成。
例如,以下預存程序傳回一個Employee表中的所有員工資訊:
CREATE PROCEDURE myProc() BEGIN SELECT * FROM Employee; END;
CREATE PROCEDURE myProc(IN employeeID INT, OUT employeeName VARCHAR(255)) BEGIN SELECT name INTO @employeeName FROM Employee WHERE ID = employeeID; SET employeeName = @employeeName; END;
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;
CREATE PROCEDURE myProc() BEGIN SELECT * FROM Employee WHERE departmentID = ( SELECT ID FROM Department WHERE name = 'Sales' ); END;
使用索引
CREATE INDEX idx_employee ON Employee(ID);
限制結果集的數量
CREATE PROCEDURE myProc() BEGIN SELECT * FROM Employee LIMIT 10; END;
CREATE TEMPORARY TABLE tempEmployee ENGINE=MEMORY SELECT * FROM Employee;
以上是詳解MySQL預存程序的結果集的詳細內容。更多資訊請關注PHP中文網其他相關文章!