Das Verfahren ist so korrekt, einen Satzanzahl weiß man vorher nicht.
Ab V5 gibts einen kleinen Trick:

with
tmpfile as (select ...Fullselect...)
,tmpcount as (select count(*) as anzahl from tmpfile)
select tmpfile.*, tmpcount.*
from tmpfile, tmpcount