"?" benötigst du nur in dynamischen SQL's.
Wobei da eben das Problem besteht, dass die Parameter den Anzahl Fragezeichen in Folge entsprechen müssen.

Pragmatisch funktioniert dies auch so (habe ichdes öfteren gesehen und benutzt)

where (:#Name = '' or upper(ADNAME) like :#Name) ...

Man muss dann halt nur schauen, dass genügend Indizes vorhanden sind um noch flexibel zu sein.
Das ist halt der Nachteil von statischen Programmiersprachen.