Naja, ganz so dynamisch ist es nicht nötig:

/exec sql
c+ declare mycursor for cursor as
c+ SELECT PROGPW, AUSFPW, IDNRPL, ANGBPL,
c+ PNAMPW, HOLZPW, KZ05PW, KZ06PW, AUSNPW, AUSDPW, DTNEPW
c+ From RBPFILE/PRGSTP
c+ Inner Join PRGLEP On PROGPW = PROGPL
c+ And AUSFPW = AUSFPL
c+ Where STATPW = 'A'
c+ and (:PROGD0 = ' ' or PROGPW = :PROGD0)
c+ and (:AUSFD0 = ' ' or AUSFPW = :AUSFD0 )
c+ and (:IDNRD0= ' ' or IDNRPL = :IDNRD0)
c+ and (:ANGBD0 = ' ' or ANGBPL = :ANGBD0 )
c+ Order by PROGPW, AUSFPW, IDNRPL, ANGBPL
c+ For read only'
c/end-exec

c/exec sql
c+ open mycursor
c/end-exec

Da ja nur deine Where-Klausel variabel ist, geht das so viel einfacher.