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

MySQLストアドプロシージャ、複数のカーソルとクエリ結果の処理

    同じルーチンで2つのカーソルを使用する方法の簡単な例を次に示します。

    DELIMITER $$
    
    CREATE PROCEDURE `books_routine`()
    BEGIN
      DECLARE rowCountDescription INT DEFAULT 0;
      DECLARE rowCountTitle INT DEFAULT 0;
      DECLARE updateDescription CURSOR FOR
        SELECT id FROM books WHERE description IS NULL OR CHAR_LENGTH(description) < 10;
      DECLARE updateTitle CURSOR FOR
        SELECT id FROM books WHERE title IS NULL OR CHAR_LENGTH(title) <= 10;
    
      OPEN updateDescription;
      BEGIN
          DECLARE exit_flag INT DEFAULT 0;
          DECLARE book_id INT(10);
          DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET exit_flag = 1;
    
          updateDescriptionLoop: LOOP
            FETCH updateDescription INTO book_id;
                IF exit_flag THEN LEAVE updateDescriptionLoop; 
                END IF;
                UPDATE books SET description = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.' WHERE books.id = book_id;
            SET rowCountDescription = rowCountDescription + 1;
          END LOOP;
      END;
      CLOSE updateDescription;
    
      OPEN updateTitle;
      BEGIN
          DECLARE exit_flag INT DEFAULT 0;
          DECLARE book_id INT(10);
          DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET exit_flag = 1;
    
          updateTitleLoop: LOOP
            FETCH updateTitle INTO book_id;
                IF exit_flag THEN LEAVE updateTitleLoop; 
                END IF;
                UPDATE books SET title = 'Lorem ipsum dolor sit amet' WHERE books.id = book_id;
            SET rowCountTitle = rowCountTitle + 1;
          END LOOP;
      END;
      CLOSE updateTitle;
    
      SELECT 'number of titles updated =', rowCountTitle, 'number of descriptions updated =', rowCountDescription;
    END
    


    1. Laravelクエリで3つ以上カウントされた場合のアイテムの選択方法

    2. mysqlで日付から月を取得するにはどうすればよいですか

    3. mysqlで指定された日付の翌月を検索します

    4. MySqlテーブル、エラー#1064およびエラー#1068複数の主キーが定義されています