2017-02-04 10 views
0

パラメータに基づいて、where条件が異なるプロシージャがあります。 プロシージャから列を返すことができるように、OUTパラメータはINTO句にする必要があります。手順 - ダイナミック条件

if条件ごとにSQL条件を持つのではなく、これを行う効率的な方法は何ですか。

+0

たぶんGurVは、私はすべての私のINパラメータを含めていない別のクエリの一部だけではなく、1 – Massimo

+0

@GurVを投稿することを意図し、INパラメータ10の周りにあります。だから、条件はどこにあるのだろうか。 – user75ponic

答えて

2

デザインに関する質問にもっと似ています。 これは、達成する必要があり、コードをどのように整理したいかによって異なります。

可能性

1-同様の手順でクエリのあなたの「IF」鎖

-2-各クエリ

3のための1つの手順を「 - 」部分がない間differencies場合1つのクエリで異なるケースを共存させるために、大規模なSQL構造体を使用する。

4-動的にSQLをビルドし、即時実行する

通常、私は1を好きではない、私は3または4で試してみるだろう、次に2で進むことはできません。動的SQLを使用した

EDIT

、あなたは、クエリの入力のparamsを持っている場合は

EXECUTE IMMEDIATE stmt into o_total_count,o_total_sum,o_hold_status,o_normal_status; 

を行うことができ、結果を抜け出すために、あなたがそれらをマークする必要があります。その後、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