MySQLに相当するものは次のようになります:
BEGIN
DECLARE CurrentFirstName VARCHAR(300);
DECLARE CurrentAge INT;
DECLARE done INT DEFAULT FALSE;
DECLARE CursorName CURSOR FOR
SELECT FirstName, Age FROM Customers;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN CursorName;
myloop: LOOP
FETCH CursorName INTO CurrentFirstName, CurrentAge;
IF done THEN
LEAVE myloop;
END IF;
IF CurrentAge > 60 THEN
insert into ElderCustomers values (CurrentFirstName,CurrentAge);
END IF;
END LOOP;
CLOSE CursorName;
END;
大きな違いはループにあり、フェッチする行がなくなったときにCONTINUE HANDLERを使用してフラグを設定し、フラグが設定されたときにループを終了します。 (それは醜いように見えますが、それはMySQLで行われている方法です。)
この例では、なぜこれが(SQL ServerとMySQLの両方でより効率的に)次のように記述されていないのかという疑問が生じます。
INSERT INTO ElderCustomers (FirstName, Age)
SELECT FirstName, Age
FROM Customers
WHERE Age > 60