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

Курсор на MySQL съхранена процедура за подготвени оператори

Имам лоши и добри новини за вас.

Първо лошите новини.

Така че досега няма динамични курсори... Тук ще ви трябва нещо подобно.

Но сега добрата новина:има поне два начина да го заобиколите - като използвате vw или tbl.

По-долу пренаписах кода ви и приложих изглед, за да направя „динамичен“ курсор.

DELIMITER //

DROP PROCEDURE IF EXISTS myproc;
CREATE PROCEDURE myproc(IN lang VARCHAR(400))

BEGIN

    DECLARE c VARCHAR(400);
    DECLARE done BOOLEAN DEFAULT FALSE;
    DECLARE cur CURSOR FOR SELECT name FROM vw_myproc;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

    SET @select = concat('CREATE VIEW vw_myproc as SELECT * FROM ', lang, ' limit 3');
    PREPARE stm FROM @select;
    EXECUTE stm;
    DEALLOCATE PREPARE stm;

    SET @select = concat('SELECT * FROM ', lang, ' limit 3');
    PREPARE stm FROM @select;
    EXECUTE stm;
    DEALLOCATE PREPARE stm;

    SET @cnt = FOUND_ROWS(); 
    SELECT @cnt;
    IF @cnt = 3 THEN
          OPEN cur;
          read_loop: LOOP
            FETCH cur INTO c;
            IF done THEN
              LEAVE read_loop;
            END IF;

            #HERE YOU CAN DO STH WITH EACH ROW e.g. UPDATE; INSERT; DELETE etc
            SELECT c;

          END LOOP read_loop;
          CLOSE cur;
          DROP VIEW vw_myproc;
    ELSE
        SET c = '';
    END IF;

END//

DELIMITER ;

И за да тествате процедурата:

CALL myproc('people_en');


  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 списък с таблици от mysql в csv файл с помощта на php

  2. Как да транспонирате редове в колони динамично в MySQL

  3. Размер на схемата на MySQL

  4. Не може да се предаде параметър по препратка в MySQLi

  5. MySQL избира вчерашната дата