2017-12-09 19 views
1

私はPL/SLQ関数内で次のような状況に陥っています。既存のテーブルのフィールド値に応じて、別の選択を実行することがあります。具体的には、私はSYS_FIELD値を取得する必要がある特定のBILL CODE(PINGPONG)に対して複数の行を持つことができます。フィールドprep_seq_num = 0およびprimary_ind = 0の場合、この行のsys_field値を直ちに取得し、0とは異なる可能性があるprep_seq_numおよびprimary_ind値を考慮しないでください。存在しない場合は、prep_seq_num!= 0およびprimary_ind = 1からsys_field値を取得します。私はそれが非常に複雑になっていますが、それでも私はD」THEN ELSEまたはIFかどうかを知る必要があります条件付き選択 - パート2

SELECT SYS_FIELD 
     INTO v_start_of_invoice 
     FROM BILL 
    WHERE TRACKING_ID = v_previous_trackingID 
     AND BSCO_CODE_ID = 'PINGPONG' 
     AND CHRG_ACCT_ID = v_ACCT_ID 
     AND PREP_SEQ_NUM = 0 -- maybe not needed here 
     AND ITEM_CAT_CODE_ID=1 
     AND PARTITION_KEY = v_prev_partition 
     AND SUBPARTITION_KEY = v_prev_subpartition 
     AND PRIMARY_IND=0; 
In the second case 

SELECT SYS_FIELD 
     INTO v_start_of_invoice 
     FROM BILL 
    WHERE TRACKING_ID = v_previous_trackingID 
     AND BILL_CODE_ID = 'PINGPONG' 
     AND ITEM_CAT_CODE_ID in ('5' , '-100') 
     AND PARTITION_KEY = v_prev_partition 
     AND SUBPARTITION_KEY = v_prev_subpartition 
     AND PRIMARY_IND=1; 

わからない:最初のケースでは、私は実行する必要がありますのでケースのみのインスタンス/列の両方が可能でなければならないためにCASEまたは何を使用すべきか、どのようにするべきか。

答えて

0

ループに暗黙カーソルを使用できます。

for rec IN (<your query that gives all records) 
LOOP 

--compare the value of this variable and decide in the IF condition. 

    IF rec.prep_seq_num=0 and rec.primary_ind=0 
     THEN 
    -- write the query to get the sys_field 

    ELSE 
    -- write alternative query. 

    END IF; 

END LOOP;