If additional code is to avoid a final(extra) loop,
this may be enough.
Note 1: Reformatted(adjusted leading blanks and new-line)
Note 2: Adding a meaningful name to a loop(if not necessary) may be a good habit.
Code:
BEGIN
DECLARE delete_count INT DEFAULT 0;
delete_loop:
REPEAT
SELECT COUNT(*)
INTO delete_count
FROM OLD TABLE
(DELETE
FROM (SELECT *
FROM reporter_status
WHERE lastoccurence < current date - 6 MONTHs
FETCH FIRST 250 ROWS ONLY
)
);
INSERT INTO log_reporter_status(text)
VALUES 'delete_count = ' || delete_count || '.' ;
COMMIT;
UNTIL
delete_count < 250
END REPEAT;