Das einzige, was in meinem Kopf kommt eine materialisierte Ansicht verwendet, und erstellen Sie dann einen eindeutigen Index auf es: vielleicht
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
Während dies nützlich sein, muss sie im Auge behalten werden, dass die Ansicht materialisiert, im Gegensatz zu einer "normalen" Ansicht belegt Platz in einem Tablespace. Und natürlich braucht der Index auch Platz.
Das ergibt keinen Sinn. Eine View enthält keine Daten, sie enthält keine Indizes oder Schlüssel. – skaffman
Materialisierte Ansichten können einen Primärschlüssel haben, aber ich weiß nicht, ob Sie das verwenden möchten. –
Laut UNNIs Kommentar ist es möglich, einer Ansicht eine deaktivierte Primärschlüsselbedingung (oder eine andere Art von Einschränkung) hinzuzufügen. Es kann getan werden, um dem Optimierer Informationen bereitzustellen. Siehe http://download.oracle.com/docs/cd/B10500_01/appdev.920/a96590/adg05itg.htm und suchen Sie nach "Einschränkungen für Ansichten". –