sql >> Databáze >  >> RDS >> Mysql

Jak převést kurzor SQL Serveru na ekvivalent MySQL

Ekvivalent MySQL by byl něco takového:

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;

Velký rozdíl je ve smyčce, kdy se používá obslužný program CONTINUE k nastavení příznaku, když již nejsou žádné další řádky k načtení, a opuštění smyčky, když je příznak nastaven. (Vypadá to ošklivě, ale v MySQL se to tak dělá.)

Tento příklad vyvolává otázku, proč to není napsáno (efektivněji v SQL Server i MySQL) jako:

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



  1. Co je špatného na tomto PL/SQL? Bind Variable * NENÍ DEKLAROVÁNO

  2. Jak změnit velikost ovládacích prvků formuláře v Accessu 2016

  3. Převést text textového pole na celé číslo

  4. Získejte obrázek uložený jako BLOB v databázi MYSQL