요구 사항을 적용하기 위해 구체화 된보기를 사용할 수 있습니다 (10.2.0.1에서 테스트 됨).
SQL> CREATE TABLE t (a VARCHAR2(20) NOT NULL PRIMARY KEY,
2 b VARCHAR2(20) NOT NULL);
Table created
SQL> CREATE MATERIALIZED VIEW LOG ON t WITH (b), ROWID INCLUDING NEW VALUES;
Materialized view log created
SQL> CREATE MATERIALIZED VIEW mv
2 REFRESH FAST ON COMMIT
3 AS
4 SELECT 1 umarker, COUNT(*) c, count(a) cc, a val_col
5 FROM t
6 GROUP BY a
7 UNION ALL
8 SELECT 2 umarker, COUNT(*), COUNT(b), b
9 FROM t
10 GROUP BY b;
Materialized view created
SQL> CREATE UNIQUE INDEX idx ON mv (val_col);
Index created
고유 색인을 사용하면 두 열 (두 행)에서 동일한 값을 가질 수 없습니다.
SQL> INSERT INTO t VALUES ('Wing Commdr.', 'Wing Cdr.');
1 row inserted
SQL> COMMIT;
Commit complete
SQL> INSERT INTO t VALUES ('Wing Cdr.', 'Wing Commander');
1 row inserted
SQL> COMMIT;
ORA-12008: erreur dans le chemin de régénération de la vue matérialisée
ORA-00001: violation de contrainte unique (VNZ.IDX)
SQL> INSERT INTO t VALUES ('X', 'Wing Commdr.');
1 row inserted
SQL> COMMIT;
ORA-12008: erreur dans le chemin de régénération de la vue matérialisée
ORA-00001: violation de contrainte unique (VNZ.IDX)
만 열 A와 B의 값에 위탁 중에 직렬화 (즉 일반에 동시 분리 된 활성을 방지 안된다).
유니티는 COMMIT 시간에만 검사되며 일부 도구는 커밋이 실패 할 것으로 예상하지 않으며 부적절하게 행동 할 수도 있습니다. 또한 COMMIT가 실패하면 전체 트랜잭션이 롤백되고 사용자는 커밋되지 않은 변경 사항을 잃게됩니다 ("재 시도"할 수 없음).
열 A는 테이블에서 고유해야합니까? – dpbradley
예, 열 A에는 고유성이 적용되어야합니다. –