2017-01-29 2 views
-1

Ich habe versucht, Batch-Einfügung in Oracle DB. Die Abfrage lautet:Batch-Einfügung in Oracle mit max (Spalte) + 1 für primark Schlüssel gibt DuplicateException Fehler

INSERT INTO <table-name> (A, B) values ((SELECT MAX(A)+ 1 FROM <>table-name), "xyz") 

Es gab ähnliche zwei Anweisungen in der Batch-Einfügung. Die obige Operation hat DuplicateException ausgelöst.

+2

Jetzt wissen Sie einen Grund, warum das Generieren von IDs auf diese Weise eine schlechte Idee ist. – mustaccio

Antwort

1

Sie sollten wirklich eine Sequenz oder eine berechnete (generierte) Spalte für die Berechnung von A verwenden - obwohl Oracle dies historisch schwieriger gemacht hat, als es sein sollte. Wenn Ihr Problem mit A ist, dann kann das Problem sein, dass A immer ist. Wenn ja:

INSERT INTO <table-name> (A, B) 
    SELECT COALESCE(MAX(A), 0) + 1, 'xyz' 
    FROM <table-name>; 

könnten Sie haben auch einen eindeutigen Index/Einschränkung für B oder auf einer anderen Spalte nicht in der insert enthalten. Und der Vollständigkeit halber sollte ich erwähnen, dass der Fehler von einem Insert-Trigger auf dem Tisch kommen könnte.

+0

Nr. 'A' ist nicht' NULLL' – arvind

+0

Eine andere Möglichkeit sind zwei Einsätze gleichzeitig, die in Konflikt stehen. –

+0

Meine Frage ist: Wird die Batch-Einfügung irgendein Problem verursachen? – arvind

Verwandte Themen