条件选择 - 第2部分

时间:2017-12-09 10:38:21

标签: oracle plsql

我在PL / SLQ功能中有以下情况。根据现有的表字段值,我可能会运行不同的选择。具体来说:我可以为特定的BILL CODE(PINGPONG)设置多行,我只需要获取SYS_FIELD值。此字段必须根据以下条件仅提取一次:如果字段prep_seq_num = 0且primary_ind = 0,则只需直接获取此行sys_field值,并且不处理其他可能的prep_seq_num和不同于0的primary_ind值。如果该行是不存在,从prep_seq_num!= 0和primary_ind = 1获取sys_field值。对于这两种情况,只有一个实例/行必须是可能的所以在第一种情况下我应该运行:

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或其他什么以及如何使用。

1 个答案:

答案 0 :(得分: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;