我寫了一個用於構建報告表的軟件包。該函數的簡化代碼我測試如下:Oracle插入缺失記錄
function do_build return integer is
V_RESULT PLS_INTEGER := 0;
cursor all_entities is
select e.id_number
from entity e
;
BEGIN
c_count := 0; -- this variable is declared at the package level outside of this function
for rec in all_entities LOOP
BEGIN
insert into reporting (
select *
from table(get_report_data(rec.id_number))
);
c_count := c_count + 1;
if MOD(c_count, 1000) = 0 Then
-- record status to table
commit;
end if;
EXCEPTION
WHEN OTHERS THEN
-- record exception to table
END;
END LOOP;
return V_RESULT;
END;
一點背景:get_report_data是返回一個數據集的所有輸入實體的報告數據的功能。
當構建完成時,「報告」表中缺少大約1000萬條記錄。沒有任何異常被拋出,除了丟失的記錄外,一切看起來都是成功的(函數返回0給調用者)。
當我爲沒有記錄其報告數據的實體記錄運行get_report_data時,記錄顯示正常。其實,我可以做一個即席「插入報告(SELECT * FROM表(get_reporting_data(missing_id))」,信息將被插入。
爲什麼這些記錄被跳過/不插?我應該循環?以不同的方式沒有更好的方式來做到這一點
啊,對!我現在正在重新確認。謝謝。 – nrg