2
如果Oracle Merge語句具有拒絕限制,是否有一種簡略的方法來確定有多少行被拒絕,而不必強制查詢拒絕目標?Oracle合併排斥行數
拒絕目的地有記錄預合併,所以目前必須計算兩次,並採取差異,但它似乎應該有一個櫃檯暴露,因爲它必須知道它是否已超過拒絕限制。
如果Oracle Merge語句具有拒絕限制,是否有一種簡略的方法來確定有多少行被拒絕,而不必強制查詢拒絕目標?Oracle合併排斥行數
拒絕目的地有記錄預合併,所以目前必須計算兩次,並採取差異,但它似乎應該有一個櫃檯暴露,因爲它必須知道它是否已超過拒絕限制。
沒有暴露的拒絕計數器。
DML錯誤記錄的主要目的是支持ETL過程。它允許我們加載大量的數據,而不會出現一些錯誤,迫使整個負載回滾。我想基本的理由是,在我們發佈針對該表的更多DML之前,錯誤將被手動解決:它並不是真的打算提供永久錯誤日誌。
但是,如果您爲每個DML語句指定一個唯一標記,則可以計算它產生的拒絕的確切數量。
declare
l_tag varchar2(46);
reject_cnt pls_integer;
begin
....
l_tag := 'merging from source_table::'||to_char(sysdate, 'yyyymmddhh24miss');
merge into target_table a
using source_table b
on (a.id = b.id)
....
log errors into err$_target_table (l_tag) reject limit 10;
select count(*)
into reject_cnt
from err$_target_table
where ora_err_tag$ = l_tag;
....
它沒有被用作永久錯誤日誌,導入是自動化的並且相對頻繁,所以以前的錯誤不能保證在後續導入時被解決。看起來我被迫重複計算表格。 – Andrew 2010-06-14 09:02:17