Mysql
 sql >> база данни >  >> RDS >> Mysql

Използване на курсора в цикъл на съхранена процедура

Можете да правите каквото искате, като поставите курсора в BEGIN ... END блок. Вижте „Вложени цикли на курсора на MySQL“ на Роланд Боуман статия за повече подробности. Може би си струва да се отбележат коментарите му относно тази техника, която често е ненужна, тъй като често е възможно да се пренапише заявката, вместо да се налага да се изпълнява вложен курсор.

Ако все пак трябва да поставите курсора си в цикъл, кодът ви трябва да изглежда така:

increment: LOOP
    block_cursor: BEGIN
        DECLARE cur1 CURSOR FOR SELECT person_id, publication_id  FROM p_publication WHERE person_id = new_count;
        DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
        OPEN cur1;
        REPEAT
            FETCH cur1 INTO pub_id, per_id;
            IF NOT done THEN
                INSERT INTO test.t2 VALUES (pub_id, per_id);
            END IF;
            SET new_count = new_count + 1;
        UNTIL done END REPEAT;
        CLOSE cur1;
        IF !(new_count < old_count ) THEN
            LEAVE increment;
        END IF;
    END block_cursor;
END LOOP increment;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да изберете най-новия набор от датирани записи от таблица на mysql

  2. Демонтиране на извиквания към базата данни на възел

  3. как да стартирам скрипта на python от mysql заявката?

  4. mysql_exceptions.OperationalError:(1045, Достъпът е отказан за потребител 'root'@'localhost' (използвайки парола:ДА))

  5. Как мога да изградя отново индекси и да актуализирам статистики в MySQL innoDB?