2017-02-04 3 views
0

У меня есть процедура, основанная на параметрах, где условие будет отличаться. Параметры OUT должны иметь значение INTO, чтобы я мог возвращать столбцы из процедуры.Процедура - Динамическая, когда условия

Вместо того, чтобы иметь условие SQL для каждого условия if, каков эффективный способ сделать это.

+0

Может гурв хотел опубликовать некоторые из различных запросов, а не только один – Massimo

+0

@GurV я не включил все мои параметры IN, существует около 10 IN параметров. Поэтому будет больше условий. – user75ponic

ответ

2

Это больше похоже на вопрос дизайна. Так что это зависит от того, что вам нужно достичь, и как вы хотите организовать свой код.

Возможности

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; 
+0

Если я использую EXCUTE IMMEDIATE, как назначить значения параметрам OUT. – user75ponic

+1

EXECUTE IMMEDIATE sql_stmt INTO var1, var2; – Massimo

+0

См. Мое редактирование в ответе для дополнительных объяснений по динамическому sql – Massimo