Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak przekonwertować kursor SQL Server na odpowiednik MySQL

Odpowiednik MySQL wyglądałby mniej więcej tak:

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;

Duża różnica polega na tym, że pętla używa CONTINUE HANDLER do ustawienia flagi, gdy nie ma więcej wierszy do pobrania, i wychodzenia z pętli, gdy flaga jest ustawiona. (To wygląda brzydko, ale tak się to robi w MySQL.)

Ten przykład nasuwa pytanie, dlaczego nie jest to napisane (bardziej wydajnie, zarówno w SQL Server, jak i MySQL) jako:

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Znajdź najbliższą szerokość/długość geograficzną za pomocą zapytania SQL

  2. Jak WYBRAĆ losowe wiersze z tabeli z dokładną liczbą wierszy?

  3. myisam umieścić blokadę tabeli na stole, nawet gdy mamy do czynienia z zapytaniem „wybierz”?

  4. Tworzenie kopii zapasowych widoków za pomocą Mysql Dump

  5. Szybkość zapytań na podstawie kolejności kolumn