Это больше похоже на вопрос дизайна. Так что это зависит от того, что вам нужно достичь, и как вы хотите организовать свой код.
Возможности
1- ваш «если» цепочка запросов в одной и той же процедуры
2- одна процедура для каждого запроса
3 - если отличиями между «где» не являются частями поэтому большие использование SQL конструкции, в том числе союзов, случая, и \ или т.п., чтобы позволить сосуществовать различные случаи в одном запросе
4- построить SQL динамически и использовать выполнить немедленные
Обычно мне не нравится 1, я бы попробовал с 3 или 4, а затем продолжаю с 2, если я не могу.
EDIT
с динамическим SQL, для получения из результатов можно сделать
EXECUTE IMMEDIATE stmt into o_total_count,o_total_sum,o_hold_status,o_normal_status;
В случае, если есть входной Params для запроса, вы должны пометить их, и затем добавить USING пункта с соответствующим входным параметром.
Пример
EXECUTE IMMEDIATE 'select count(*) from departments where department_id=:id' INTO l_cnt USING l_dept_id;
Может гурв хотел опубликовать некоторые из различных запросов, а не только один – Massimo
@GurV я не включил все мои параметры IN, существует около 10 IN параметров. Поэтому будет больше условий. – user75ponic