sql >> Databasteknik >  >> RDS >> Mysql

Hur man konverterar en SQL Server-markör till MySQL-motsvarande

MySQL-motsvarigheten skulle vara ungefär så här:

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;

Den stora skillnaden ligger i slingan, att använda CONTINUE HANDLER för att sätta en flagga när det inte finns fler rader att hämta, och att lämna slingan när flaggan är satt. (Det ser fult ut, men det är så det görs i MySQL.)

Det här exemplet väcker frågan varför detta inte skrivs (mer effektivt, i både SQL Server och MySQL) som:

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



  1. Automatisera mysql_secure_installation med echo-kommando via ett skalskript

  2. Databasanvändarhantering:Hantera roller för MariaDB

  3. Arbetar med INTERVAL och CURDATE i MySQL

  4. Vad ska man göra när man behöver heltal större än 20 siffror på mysql?