ORA-01452: cannot CREATE UNIQUE INDEX; doppelte Schlüssel gefunden
Diese können markiert werden, wie doppelte aber ich finde Problem, wenn ich gepfiffen
Erstellen Sie Einzigartige groß-und Kleinschreibung Einschränkung auf zwei varchar-Felder
Ich habe eine Tabelle std_tbl dass einige doppelte Datensätze in einer der Spalten sagen Column_One.
Ich erstellt eine unique-Einschränkung für die Spalte
ALTER TABLE std_tbl
ADD CONSTRAINT Unq_Column_One
UNIQUE (Column_One) ENABLE NOVALIDATE;
Ich verwendet ENABLE NOVALIDATE, wie ich will, zu halten die bestehenden doppelte Datensätze zu validieren und zukünftige Datensätze auf Dubletten.
Aber hier, das constaint nicht für den Fall, heikle Begriffe, wie, wenn der Wert Column_One ist 'abcd', die es ermöglicht, 'Abcd' und 'ABCD' einfügen in die Tabelle.
Ich will das Verhalten der groß-und Kleinschreibung, so dass es nicht Aussehen sollten, für den Fall während der Validierung der Daten. Dafür habe ich mir diese Lösung ausgedacht.
CREATE UNIQUE INDEX Unq_Column_One_indx ON std_tbl (LOWER(Column_One));
Aber es gibt mir die Fehlermeldung:
ORA-01452: cannot CREATE UNIQUE INDEX; doppelte Schlüssel gefunden
Bitte helfen Sie mir...
- Ich will nicht, um diese Datensätze löschen. Gibt es etwas wie NOVALIDATE, so dass es ignoriert vorhandene Duplikate?
- Die Vorschrift ist so, dass nur zukünftige Aufzeichnungen sollte überprüft werden, wie die vorhandenen Einträge mit keys in anderen Tabellen. Und es macht Sinn, als ENABLE NOVALIDATE ist nur für diesen Zweck. Das einzige problem mit ENABLE NOVALIDATE ist, ist es case sensitive.
- Bei zwei identischen Werten in der Tabelle -
abcd
zweimal sagen, mit dem gleichen Fall - dannALTER TABLE
werfen würden ORA-02299 trotz derNOVALIDATE
, da es nicht in der Lage, erstellen Sie den eindeutigen index zurück, der bis. In 11g konnten Sie erstellen eine virtuelle Spalte und einschränken, aber Sie haben das gleiche problem, erstellen Sie den eindeutigen index. Sie müssten, um zu erstellen einen nicht-eindeutigen index zuerst, und verwenden, sichern Sie die unique-Einschränkung. Ich glaube nicht, dass Sie bekommen können, dass die kombinierte Wirkung in 10g obwohl, es sei denn, Sie imitieren die virtuelle Spalte mit einer real-Spalte und ein Auslöser.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser tritt auf, wenn Sie versuchen, führen Sie eine CREATE UNIQUE INDEX-Anweisung auf eine oder mehrere Spalten, die doppelte Werte enthalten.
Zwei Möglichkeiten zur Lösung (die ich kenne):
Entfernen Sie die EINZIGARTIGEN keyword aus Ihrem CREATE UNIQUE INDEX-Anweisung und den Befehl erneut ausführen (z.B. wenn Sie die Werte müssen nicht eindeutig sein).
Wenn Sie eindeutig sein müssen, löschen Sie die überflüssigen Einträge, die verursacht die doppelten Werte und wiederholen Sie die CREATE UNIQUE INDEX-Anweisung.