А планируется ли сделать что-то наподобие курсорных переменных? Ну, к примеру
... declare F1 cursor(X1: integer) for (select name from T where id=:X1); declare F2 cursor for (select name from T); declare RF refcursor; ... if (inpar is null) then RF = F1(inpar) else RF = F2(); RF.Open ...

