sql >> Database teknologi >  >> RDS >> Mysql

MySQL-lagret proceduremarkør til forberedte udsagn

Jeg har nogle dårlige og gode nyheder til dig.

Først de dårlige nyheder.

Så der er ingen dynamiske markører indtil videre... Her ville du have brug for noget som dette.

Men nu er den gode nyhed:der er mindst to måder at omgå det på - ved at bruge vw eller tbl.

Nedenfor har jeg omskrev din kode og anvendte visning for at lave en 'dynamisk' markør.

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 ;

Og for at teste proceduren:

CALL myproc('people_en');


  1. Trin for trin opgraderingsproces for R12.2 Upgrade Part -4 (anvender 12.2.x Release Update Pack)

  2. Automatiseret test af desktopapplikationen:overblik over hensigtsmæssighed og rammer

  3. hvad der sker i cutover-fasen af ​​adop i R12,2

  4. Implementering af twitter og facebook som hashtags