Parece que en TODOS los registro de la tabla aux_infplanta estás poniendo el mismo resultado.
Verifica si esto es realmente lo que quieres.
Segundo "multiple rows...".
Esto se refiere que que estas tratando de poner varios registros dentro de un lugar donde entra solo uno.
Mi sospecha es que el SELECT devuelve más de un resultado.
Código SQL
[-]
select (art_planta.m3xhora * (infplanta.hmetro_termino - infplanta.hmetro_inicio))
from infplanta, art_planta, aux_infplanta
where infplanta.infnro = aux_infplanta.numinf
and aux_infplanta.codart = art_planta.codart
and infplanta.planta = art_planta.codplanta
and infplanta.fecha > (:FECHA)
Prueba a hacer el select solo y lo verás.
Normalmente para solucionar este problema utilizarías algo así como select sum(campo) from ...
Código SQL
[-]
update aux_infplanta
set aux_infplanta.m3producidos =
(select SUM( (art_planta.m3xhora * (infplanta.hmetro_termino - infplanta.hmetro_inicio)) )
from infplanta, art_planta, aux_infplanta
where infplanta.infnro = aux_infplanta.numinf
and aux_infplanta.codart = art_planta.codart
and infplanta.planta = art_planta.codplanta
and infplanta.fecha > (:FECHA)
)