2017-05-25 2 views
0

Ich habe eine Tabelle, TBL_1, mit den folgenden Feldern:Oracle in Tabelle einfügen mit zusammengesetzten Schlüsseln

TBL_ID NUMBER (pk), 
CREATE_DATE DATE (pk), 
TBL_IND VARCHAR2(1) 

Der Primärschlüssel ist auf TBL_ID und CREATE_DATE, Ich versuche, eine Insert-Anweisung auszuführen, sondern erhalten eine Fehlermeldung ORA-00001: unique constraint (primary key) violated.

Es gibt einen vor dem Einsetzen Trigger die NEW.CREATE_DATE als SYSDATE. Die Insert-Anweisung wie folgt aussieht:

INSERT INTO TBL_1 (tbl_id,tbl_ind) 
    SELECT tbl_id,'Y' 
    FROM tbl_info; 

Die eigentliche Abfrage ein wenig komplexer ist, aber ich wollte nur darauf hinweisen, es ist eine INSERT INTO SELECT Aussage. Ist es möglich, wenn es ein Duplikat gibt tbl_id der Trigger verwendet das gleiche genaue Datum für beide Zeilen und verursacht damit einen doppelten Fehler? Wie kann ich das vermeiden?

Antwort

1

Ich glaube nicht, dass es eine gute Idee ist, create_date als Teil des Primärschlüssels zu haben. Ich würde vorschlagen, dass Sie stattdessen einen Sequenzwert verwenden.

Wenn Sie nicht die Anzahl der Zeilen reduzieren nichts ausmacht, können Sie tun:

INSERT INTO TBL_1 (tbl_id,tbl_ind) 
    SELECT DISTINCT tbl_id, 'Y' 
    FROM tbl_info; 

Oder, wenn Sie immer noch alle Zeilen eingefügt werden soll, dann Ihre Daten restrukturieren eine Sequenz anstelle des Erstellungsdatums zu verwenden .

Verwandte Themen