Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como converter um cursor do SQL Server para o equivalente ao MySQL


O equivalente do MySQL seria algo assim:
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;

A grande diferença está no loop, usando o CONTINUE HANDLER para definir um sinalizador quando não houver mais linhas para buscar e sair do loop quando o sinalizador estiver definido. (Isso parece feio, mas é assim que é feito no MySQL.)

Este exemplo levanta a questão de por que isso não está escrito (com mais eficiência, no SQL Server e no MySQL) como:
INSERT INTO ElderCustomers (FirstName, Age)
SELECT FirstName, Age
  FROM Customers
 WHERE Age > 60