sql >> Database >  >> RDS >> Mysql

Een SQL Server-cursor converteren naar MySQL-equivalent

Het MySQL-equivalent zou er ongeveer zo uitzien:

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;

Het grote verschil zit in de lus, waarbij de CONTINUE HANDLER wordt gebruikt om een ​​vlag in te stellen wanneer er geen rijen meer zijn om op te halen, en de lus verlaat wanneer de vlag is ingesteld. (Dat ziet er lelijk uit, maar zo gaat het in MySQL.)

Dit voorbeeld roept de vraag op waarom dit niet (efficiënter, in zowel SQL Server als MySQL) is geschreven als:

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



  1. MySQL-tabel met vast aantal rijen?

  2. Hoe een integer-uitvoer van een SQL-query te krijgen

  3. Samengestelde primaire sleutel maken in SQL Server

  4. Hoge beschikbaarheid volgen voor PostgreSQL met Heartbeat