我陷入了一个难题。我需要比较2的计数,并根据比较结果更新其中一个表格。以下是详细情况。
我有两个表:dwh_idh_to_iva_metadata_t和lnd_sml_price_t.每天都有一个包在运行,它将数据从源表dwh_sml_price_t加载到目的表lnd_sml_price_t。这个包还会检查 "dwh_idh_to_iva_metadata_t "和 "lnd_sml_price_t "表之间的计数。如果计数匹配,那么它就会更新表 dwh_idh_to_iva_metadata_t 中的几个列,如果计数不匹配,那么这个包就会抛出一个异常并退出。为了进行计数比较,我们创建了一个游标,然后获取该游标进行比较。游标的代码如下。
CURSOR C_CNT_PRICE IS
SELECT
lnd.smp_batchrun_id batch_id,
lnd.lnd_count,
dwh.dwh_count
FROM
(
SELECT
smp_batchrun_id,
COUNT(*) lnd_count
FROM
iva_landing.lnd_sml_price_t
GROUP BY
smp_batchrun_id
) lnd
LEFT JOIN (
SELECT
batchrun_id,
sent_records_count dwh_count,
dwh_sending_table
FROM
dwh.dwh_idh_to_iva_metadata_t
) dwh ON dwh.batchrun_id = lnd.smp_batchrun_id
WHERE
dwh.dwh_sending_table = 'DWH_SML_PRICE_T'
ORDER BY
1 DESC; `
而实际的比较代码是:
` FOR L_COUNT IN C_CNT_PRICE LOOP --0001,0002
IF L_COUNT.lnd_count = L_COUNT.dwh_count THEN
UPDATE DWH.DWH_IDH_TO_IVA_METADATA_T idh
SET idh.IVA_RECEIVING_TABLE = 'LND_SML_PRICE_T',
idh.RECEIVED_DATE = SYSDATE,
idh.RECEIVED_RECORDS_COUNT = L_COUNT.lnd_count,
idh.status = 'Verified'
WHERE L_COUNT.batch_id = idh.batchrun_id
AND idh.dwh_sending_table = 'DWH_SML_PRICE_T';
COMMIT;
ELSE
RAISE EXCPT_MISSDATA; -- Throw error and exit process immediately
END IF;
END LOOP; `
现在,问题是在某些情况下 "LND_SML_PRICE_T "表没有任何数据,在这种情况下,DWH_IDH_TO_IVA_METDATA_T应该更新列,就像在计数比较时一样。
我需要帮助修改代码,以便在LND_SML_PRICE_T表中没有记录的情况下也能进行比较。
谢谢!我遇到了一个难题。
如果表中没有记录 LND_SML_PRICE_T
表格、光标 C_CNT_PRICE
's LND_COUNT
等于 0
这意味着,比较代码应该修改为
FOR L_COUNT IN C_CNT_PRICE LOOP
IF (L_COUNT.lnd_count = L_COUNT.dwh_count)
or L_COUNT.lnd_count = 0 --> this
THEN