sql >> Database teknologi >  >> RDS >> Mysql

Sådan konverteres en SQL Server-markør til MySQL-ækvivalent

MySQL-ækvivalenten ville være sådan her:

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 store forskel er i løkken, ved at bruge CONTINUE HANDLER til at sætte et flag, når der ikke er flere rækker at hente, og at forlade løkken, når flaget er sat. (Det ser grimt ud, men det er sådan det gøres i MySQL.)

Dette eksempel rejser spørgsmålet, hvorfor dette ikke er skrevet (mere effektivt, i både SQL Server og MySQL) som:

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



  1. Sådan gør du limit offset dynamisk ved kun at bruge (My)SQL

  2. TNS-12519 uden maksimale processer nået

  3. Hvordan fungerer MySQL CASE?

  4. Kan ikke sende strengværdi 1,2 som input til en orakelforespørgsel