2016-07-27 39 views
0

Wir haben ein Problem beim Einfügen eines Datensatzes in eine Tabelle in unserer Oracle-Datenbank.ORA-00001 eindeutige Einschränkung - mit gültigem Wert

Die Einfügung erfolgt über VB.NET. Die Tabelle selbst hat keinen Primärschlüssel und zwei eindeutige Indizes.

Die zwei eindeutigen Indizes sind eine ganze Zahl (die von einer Oracle-Sequenz verwaltet wird) und ein char-Feld (eine Berechnung, die auf einer zweiten Sequenz basiert).

Beim Versuch, einen Datensatz einzufügen, erhalten wir den Fehler 'ORA-00001' als Ergebnis. Beim Durchlaufen des Codes erhält er zuerst die zwei Sequenznextvals (nach denen ich sehen kann, dass sie tatsächlich inkrementiert haben), dann führt er die Einfügeabfrage durch und schlägt fehl. Ich kann die zwei eindeutigen Indexwerte nehmen, die der Einfügevorgang auszuführen versucht, und sie in der Tabelle abfragen, und erhalte keine Ergebnisse.

Ich bin mir nicht sicher, welche Art von Informationen wäre nützlich, um dieses Problem einzugrenzen, aber ich weiß, dass der Orakelfehler, den ich in .NET bekomme, auf den ganzzahligen Indexwert zeigt.

Wenn jemand irgendeinen Einblick hat, würde es sehr geschätzt werden!

+0

Sie müssen Ihren Code schreiben –

+0

Wenn Sie wissen, dass sie einzigartig und nicht in der Tabelle vorhanden sind, und jede eindeutige Indexbedingung erfüllt ist, ist die einzige logische Sache, die ich denken kann, dass Sie versuchen, das auszuführen Fügen Sie zweimal mit den gleichen Werten ein. – xQbert

+0

Sie müssen ein minimales (aber vollständiges) Datenbankskript und vb.net-Code veröffentlichen, mit dem wir Ihr Problem reproduzieren können. – sstan

Antwort

0

Jedes Mal, wenn Sie "NEXTVAL" anriefen, erhöhte es sich.

Wenn Sie in eine Tabelle mit Sequenz einfügen möchten, werden Sie möglicherweise mit dem Fehler "uniform constraint violated" fehlschlagen. Wenn Sie das zweite Mal versucht haben, wird es Erfolg haben, weil die Sequenz beim ersten Mal überprüft werden muss.

Hier ist die Lösung:

vor dem Einsetzen, führen Sie die Auswahlabfrage:

select (Sie Spaltennamen sequenzieren) aus der Tabelle.

Dann

Insert in Tabellenwert (...).

Es wird funktionieren.