Mit dem "with" fallen leider viele rein.
Es ist nur eine andere Schreibweise für

select * from (select bla from myfile) xx

Dies kann ebenso auch beim "join (select blablla from myfile2) b on ..." verwendet werden.
Solange der Optimizer nicht behauptet eine temporäre Tabelle zu erstellen, wird die Information immer wieder neu erstelt. Die Quelldaten liegen dann ab dem 2. Mal nur schon im Cache wenn du Glück hast und sie nicht verdrängt wurden.

Oben schreibst du:
"Das Pgm zeigt 24 Zeilen, je Zeile werden 4 Sql ausgeführt."

Dabei schlackere ich schon mit den Ohren.
Kann man nicht ein SQL stricken, dass das Ergebnis der 24 Zeilen direkt erzeugt?
Dann kann ich per Fetch halt direkt Zeile per Zeile in die SFL ausgeben.

Wenn ein SQL mal 1 Sekunde dauert, dann ist eben 24 * 4 = 96 Sekunden macht per se 1,5 Minuten.
Deine einzelnen SQL's sind aber halt langsamer und die gilt es zu optimieren und ggf. ein dickeres SQL zu bilden.