Bueno, el primer problema es que lo que tu estás tratando de hacer es recorrer los registros uno a uno de una tabla, leyéndolos por medio de su ID, pero no estás considerando la posibilidad de que un ID (dos en este caso) no existan o hayan sido borrados. En ese caso se generará un error porque las variables devuelven NULL y por tanto debería controlarse eso.
Por otro lado, si lo que quieres es recorrer toda la tabla, estás haciéndolo del modo incorrecto: Para eso se usan cursores.
Finalmente, lo que quieres es tomar todos los registros que cumplen una condición ("Terminado") y guardarlos en otra tabla... Bueno, para eso sólo necesitarías una consulta, y no tanto proceso.
Con cursores sería mas o menos así:
Código MySQL:
Ver originalDELIMITER $$
SELECT idcatastros
, c_fecregistro
, senal_idsenal
, programa_idprograma
, clientes_rutclientes
, clientes_cvclientes
, nombre_empresa
, usuarios_c_perfil
, usuarios_auspicio
, oficina_idoficina
, stock_idstock
, rubro_idrubro
, fecha_desde
, fecha_hasta
, avisos_idavi1
, avisos_idavi2
, avisos_idavi3
WHERE estado
= 'Terminado';
OPEN cur1;
LEAVE CICLO;
FETCH cur1
INTO idc
, fr
, SEN
, PROG
, cr
, cv
, ne
, up
, ua
, of
, STOCK
, rb
, fd
, FH
, A1
, A2
, A3
;
INSERT INTO historial
(fecha_termino
, idcatastros
, c_fecregistro
, senal_idsenal
, programa_idprograma
, clientes_rutclientes
, clientes_cvclientes
, nombre_empresa
, usuarios_c_perfil
, usuarios_auspicio
, oficina_idoficina
, stock_idstock
, rubro_idrubro
, fecha_desde
, fecha_hasta
, avisos_idavi1
, avisos_idavi2
, avisos_idavi3
) VALUES (CURDATE(),idc
, fr
, SEN
, PROG
, cr
, cv
, ne
, up
, ua
, of
, STOCK
, rb
, fd
, FH
, A1
, A2
, A3
); CLOSE cur1;
WHERE estado
= 'Terminado'; DELIMITER ;
Y sin cursores se reduce a:
Código MySQL:
Ver originalDELIMITER $$
INSERT INTO historial
(fecha_termino
, idcatastros
, c_fecregistro
, senal_idsenal
, programa_idprograma
, clientes_rutclientes
, clientes_cvclientes
, nombre_empresa
, usuarios_c_perfil
, usuarios_auspicio
, oficina_idoficina
, stock_idstock
, rubro_idrubro
, fecha_desde
, fecha_hasta
, avisos_idavi1
, avisos_idavi2
, avisos_idavi3
) SELECT idcatastros
, c_fecregistro
, senal_idsenal
, programa_idprograma
, clientes_rutclientes
, clientes_cvclientes
, nombre_empresa
, usuarios_c_perfil
, usuarios_auspicio
, oficina_idoficina
, stock_idstock
, rubro_idrubro
, fecha_desde
, fecha_hasta
, avisos_idavi1
, avisos_idavi2
, avisos_idavi3
WHERE estado
= 'Terminado'; WHERE estado
= 'Terminado'; DELIMITER ;