sql >> データベース >  >> RDS >> Mysql

SQLServerカーソルを同等のMySQLに変換する方法

    MySQLに相当するものは次のようになります:

    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;
    

    大きな違いはループにあり、フェッチする行がなくなったときにCONTINUE HANDLERを使用してフラグを設定し、フラグが設定されたときにループを終了します。 (それは醜いように見えますが、それはMySQLで行われている方法です。)

    この例では、なぜこれが(SQL ServerとMySQLの両方でより効率的に)次のように記述されていないのかという疑問が生じます。

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



    1. MySQL:レコードが存在しない場合でも、範囲内のすべての日付を選択します

    2. JavaFXMySQL接続例をお願いします

    3. jOOQでの一時テーブル列名の修飾

    4. ミリ秒単位の月ごとの値の合計