我正在调用的程序遇到问题。
该过程有 2 个循环,一个用于连接到同一网络中的其他数据库,另一个用于从每个连接中获取数据,但问题是它只从第一个连接中获取第一包数据。我不确定,但也许我在第二个循环中做错了什么,忘记了一些东西。这是我第二次做这样的事情,也是第一次太复杂了。
这是程序的代码。
CREATE PROCEDURE `firians`.`sincronizarAgencias` ()
BEGIN
declare nomeAgencia varchar(255);
declare ultimaAgencia int default false;
declare terminouPicagens int default false;
declare agenciasCur cursor for select ip from agencia;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET ultimaAgencia = TRUE;
open agenciasCur;
nomeAgenciasLoop: LOOP
FETCH agenciasCur INTO nomeAgencia;
IF ultimaAgencia THEN
close agenciasCur;
LEAVE nomeAgenciasLoop;
END IF;
SELECT nomeAgencia;
DROP VIEW IF EXISTS temp_agencia_view;
SET @query = CONCAT('CREATE VIEW temp_agencia_view as select data, idempregado, idsociedade, nif, tipo from `', nomeAgencia, '`');
select @query;
PREPARE stmt from @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
blocoPicagens: BEGIN
declare newData DATETIME;
declare newIdEmpregado VARCHAR(45);
declare newIdSociedade bigint(20);
declare newNif varchar(15);
declare newTipo varchar(45);
declare ultimaPicagem int default false;
-- SELECT data, idempregado, idsociedade, nif, tipo from temp_agencia_view;
DECLARE picagensCursor cursor for select data, idempregado, idsociedade, nif, tipo from temp_agencia_view;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET ultimaPicagem := TRUE;
open picagensCursor;
picagensLoop: LOOP
fetch picagensCursor into newData, newIdEmpregado, newIdSociedade, newNif, newTipo;
IF ultimaPicagem THEN
-- SET ultimaPicagem := false;
close picagensCursor;
DROP VIEW IF EXISTS temp_agencia_view;
LEAVE picagensLoop;
END IF;
INSERT INTO `firians`.`assiduidade`(`data`,`idempregado`,`idsociedade`,`tipo`,`nif`)
VALUES
(newData, newIdEmpregado, newIdSociedade, newTipo, newNif);
INSERT INTO `firians`.`assiduidadebackup`(`data`,`idempregado`,`idsociedade`,`tipo`,`nif`)
VALUES
(newData, newIdEmpregado, newIdSociedade, newTipo, newNif);
set @updateRowQuery = CONCAT('DELETE FROM `', nomeAgencia,'` WHERE idempregado = ', newIdEmpregado, ' AND idsociedade = ', newIdSociedade, ' AND tipo = ', newTipo, ' AND data LIKE \'', newData, "'");
select @updateRowQuery;
PREPARE stmtUpdate from @updateRowQuery;
EXECUTE stmtUpdate;
DEALLOCATE PREPARE stmtUpdate;
END LOOP picagensLoop;
DROP VIEW IF EXISTS temp_agencia_view;
-- select * from temp_agencia_view;
END blocoPicagens;
END LOOP nomeAgenciasLoop;
DROP VIEW IF EXISTS temp_agencia_view;
END
你能帮助我吗?
问候,
埃尔卡斯