Hola.
codigo_suscriptor no es la clave primaria de esa tabla, ¿ verdad ?. Tienes que utilizar la clave primaria para identificar cada uno de los registros a actualizar. Sino ocurre lo que te está pasando ahora, que en cada pasada del bucle actualizas todos los registros afectados (y claro, al final solo queda el valor puesto en la última pasada).
Es decir, supongamos que la clave primaria se llama simplemente ID_FACTURA. Entonces tu procedimiento almacenado queda :
Código:
SET TERM ^ ;
CREATE PROCEDURE RELLENAR
AS
DECLARE VARIABLE ID_FACTURA;
DECLARE VARIABLE I INTEGER;
begin
i=1;
for select ID_FACTURA
from facturacion
where codigo_suscriptor='2580'
into :ID_FACTURA
do
begin
i=i+1;
update facturacion
set nr=:i
where ID_FACTURA = :ID_FACTURA;
end
suspend;
end^
SET TERM ; ^
GRANT SELECT,UPDATE ON FACTURACION TO PROCEDURE RELLENAR;
GRANT EXECUTE ON PROCEDURE RELLENAR TO SYSDBA;
NOTA: He puesto en negrita los cambios que tienes que hacer (claro que en lugar de ID_FACTURA tienes que usar el nombre de tu campo de clave primaria).