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