Единственное, что приходит на мой взгляд, использует материализованное представление, а затем создать уникальный индекс на нем:
drop materialized view tq84_mat_view;
drop table tq84_table;
create table tq84_table (
a number,
b number
);
create materialized view tq84_mat_view
refresh on commit as
select
a,
sum(b) sum_b
from
tq84_table
group by
a;
create unique index tq84_mat_view_uix on tq84_mat_view (sum_b);
insert into tq84_table values (1, 1);
insert into tq84_table values (2, 2);
insert into tq84_table values (1, 4);
commit;
insert into tq84_table values (2, 3);
commit;
--> ORA-12008: error in materialized view refresh path
--> ORA-00001: unique constraint (SPEZMDBA.TQ84_MAT_VIEW_UIX) violated
Хотя это может быть полезным, следует иметь в виду, что материализованное представление, в отличие от «нормального» представления занимает пространство в табличном пространстве. И, конечно, индекс тоже нуждается в пространстве.
Это не имеет смысла. A View не содержит данных, он не имеет индексов или ключей. – skaffman
Материализованные представления могут иметь первичный ключ, но я не знаю, если это то, что вы хотите использовать? –
Согласно комментарию UNNI, к представлению можно добавить отключенный первичный ключ (или другой вид). Это можно сделать, чтобы предоставить информацию оптимизатору. См. Http://download.oracle.com/docs/cd/B10500_01/appdev.920/a96590/adg05itg.htm и найдите «ограничения на представления». –