sql >> Base de Datos >  >> RDS >> Mysql

Cómo convertir un cursor de SQL Server a MySQL equivalente

El equivalente de MySQL sería algo como esto:

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;

La gran diferencia está en el ciclo, usando el CONTROLADOR CONTINUAR para establecer un indicador cuando no hay más filas para buscar y salir del ciclo cuando se establece el indicador. (Eso se ve feo, pero así es como se hace en MySQL).

Este ejemplo plantea la pregunta de por qué esto no está escrito (más eficientemente, tanto en SQL Server como en MySQL) como:

INSERT INTO ElderCustomers (FirstName, Age)
SELECT FirstName, Age
  FROM Customers
 WHERE Age > 60