आप अपनी आवश्यकताओं को लागू करने के लिए भौतिक दृश्य का उपयोग कर सकते हैं (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)
दौरान प्रतिबद्ध है, लेकिन केवल कॉलम ए और बी के मूल्यों पर यह क्रमानुसार होगा (यानी: सामान्य रूप में यह समवर्ती संबंध तोड़ना गतिविधि को रोकने नहीं होना चाहिए)।
यूनिकिटी केवल COMMIT समय पर जांच की जाएगी और कुछ टूल प्रतिबद्ध होने की उम्मीद नहीं करते हैं और अनुपयोगी व्यवहार कर सकते हैं। साथ ही जब COMMIT विफल हो जाता है, तो संपूर्ण लेनदेन वापस लुढ़का जाता है और आप किसी भी असामान्य परिवर्तन को खो देते हैं (आप "पुनः प्रयास नहीं कर सकते")।
स्रोत
2010-04-24 09:54:48
क्या इसका इरादा है कि कॉलम ए तालिका में अद्वितीय हो? – dpbradley
हां, कॉलम ए में विशिष्टता लागू होनी चाहिए। –