我正在尝试使用以下create_comparison过程
对存在于同一数据库中的两个表进行比较begin
dbms_comparison.create_comparison(
comparison_name => 'comp_dbms_test',
SCHEMA_NAME => 'DEV06_OWNER',
OBJECT_NAME => 'facility_prod_temp',
INDEX_SCHEMA_NAME => 'DEV06_OWNER',
INDEX_NAME => 'idx_test',
dblink_name => null,
REMOTE_SCHEMA_NAME => 'DEV06_OWNER',
remote_object_name => 'facility_test_temp',
column_list => '*',
SCAN_MODE => DBMS_COMPARISON.CMP_SCAN_MODE_FULL);
end;
并低于错误 -
Error report:
ORA-23629: DEV06_OWNER.IDX_TEST is not an eligible index on table DEV06_OWNER.FACILITY_PROD_TEMP for comparison
ORA-06512: at "SYS.DBMS_COMPARISON", line 5008
ORA-06512: at "SYS.DBMS_COMPARISON", line 448
这是表格的结构:
desc FACILITY_PROD_TEMP;
Name Null Type
------------------- ---- ------------------
PARTITION_KEY VARCHAR2(12)
CONTRACT_REFERENCE VARCHAR2(101 CHAR)
CONTRACT_DESC VARCHAR2(100 CHAR)
ATTRIBUTE_3 VARCHAR2(100 CHAR)
ATTRIBUTE_1 VARCHAR2(100 CHAR)
COMMITED VARCHAR2(10 CHAR)
ATTRIBUTE_6 VARCHAR2(100 CHAR)
ATTRIBUTE_7 VARCHAR2(100 CHAR)
ATTRIBUTE_8 VARCHAR2(100 CHAR)
VALUE_DATE VARCHAR2(30)
ATTRIBUTE_5 VARCHAR2(100 CHAR)
LGD VARCHAR2(30)
DIM16 VARCHAR2(100 CHAR)
MATURITY_DATE VARCHAR2(50)
DIM9 VARCHAR2(100 CHAR)
IMPORT_SOURCE VARCHAR2(100 CHAR)
我使用以下语法 -
在contract_reference列上创建了一个索引 create index idx_test on facility_prod_temp (contract_reference);
Oracle Doc说:
对于支持扫描模式CMP_SCAN_MODE_FULL和CMP_SCAN_MODE_CUSTOM,数据库对象必须具有以下类型的索引之一: •数字,时间戳,间隔,DATE,VARCHAR2或CHAR数据类型列上的单列索引
根据我在CONTRACT_REFERENCE列上创建了一个varchar2类型的索引。
我正在使用 -
Oracle Database 11g企业版11.2.0.4.0版 - 64位生产
答案 0 :(得分:0)
如果您在the docs中进一步阅读,则说明
The index columns in a comparison must uniquely identify every row involved in
a comparison. The following constraints satisfy this requirement:
- A primary key constraint
- A unique constraint on one or more non-NULL columns
因此,您需要在contract_reference列中添加主键或唯一约束:
alter table facility_prod_temp add constraint uk_fpt_temp unique (contract_reference);
然后您可以在dbms_comparison调用中使用该约束的索引(默认情况下,它共享相同的名称):
INDEX_NAME => 'uk_fpt_temp',