2016-05-19 4 views
0

Ich habe unter Abfrage (Oracle), die korrigiert werden muss:Wie benutze ich NVL/DECODE korrekt?

select 
    parm_data_1, 
    parm_data_2, 
    parm_data_3, 
    parm_data_4, 
    parm_data_5, 
    parm_data_6, 
    parm_data_7, 
    parm_data_8, 
    parm_data_9, 
    parm_data_10, 
    parm_data_11, 
    parm_data_12, 
    parm_data_13, 
    parm_data_14, 
    parm_data_15, 
    parm_data_16, 
    parm_data_17, 
    parm_data_18, 
    parm_data_19, 
    parm_data_20, 
    wild_card_ind 
-- End SIR A3109 
from dbt_c_param_data 
where 
parm_id = i_param_id and 

    brch_code in (nvl(i_pdet(1),'*'), '*') and 
    prod_code in (nvl(i_pdet(2),'*'), '*') and 
    cus_mst_no in (nvl(i_pdet(3),'*'), '*') and 

    parm_key_1 in (nvl(i_key_val(1),'*'), '*' , '**') and 
    parm_key_2 in (nvl(i_key_val(2),'*'), '*' , '**') and 
    parm_key_3 in (nvl(i_key_val(3),'*'), '*' , '**') and 
    parm_key_4 in (nvl(i_key_val(4),'*'), '*' , '**') and 
    parm_key_5 in (nvl(i_key_val(5),'*'), '*' , '**') and 
    parm_key_6 in (nvl(i_key_val(6),'*'), '*' , '**') and 
    parm_key_7 in (nvl(i_key_val(7),'*'), '*' , '**') and 
    parm_key_8 in (nvl(i_key_val(8),'*'), '*' , '**') and 
    parm_key_9 in (nvl(i_key_val(9),'*'), '*' , '**') and 
    parm_key_10 in (nvl(i_key_val(10),'*'),'*' , '**') 
    order by wild_card_ind asc; 

In der IN(.. , .. , ..) Klausel obiger Abfrage, wenn der Wert von i_key_value (i) stellt sich heraus, nicht null ist, dann wird es wie (value, *, **).

bei nicht null ist, möchte ich so etwas wie (value) nur in IN Klausel, sonst ('*', '**')

Wie die Abfrage verändern, dies zu erreichen?

+1

Sind Sie Oracle oder MySQL? Die Verwendung von 'decode()' schlägt Oracle vor. –

Antwort

1

Try this;)

... 
and 
((i_key_val(1) is not null and parm_key_1 in (i_key_val(1))) or parm_key_1 in ('*', '**')) 
and 
((i_key_val(2) is not null and parm_key_2 in (i_key_val(2))) or parm_key_2 in ('*', '**')) 
... 

Oder diese;)

... 
parm_key_1 in (nvl(i_key_val(1),'*'), nvl(i_key_val(1),'**')) and 
... 
+0

Danke Reno! :-) –