2016-12-22 4 views

Antwort

3

Was verstehst du nicht über den Fehler? Sie haben eine Spalte "identity", in der der Wert als Sequenz generiert wird. Sie können nicht hinein einfügen. So listen Sie alle anderen Spalten:

INSERT INTO LEAVES_APPROVAL(col1, col2, col3, . . .) 
    SELECT col1, col2, col3, . . . 
    FROM REQUESTS_TEMP r 
    WHERE r.CIVIL_NUMBER = 33322 AND 
      r.REQUEST_ID = (SELECT MAX(s.REQUEST_ID) FROM REQUESTS_TEMP s); 

Im Allgemeinen ist es eine gute Idee ist auf jeden Fall in einem INSERT alle Spalten aufzulisten. Dies verhindert unerwartete Fehler, da die Spalten in der falschen Reihenfolge sind oder die Tabellen eine unterschiedliche Anzahl von Spalten haben.

0

Eine der Spalten in Ihrer Zieltabelle (leaves_approval) enthält eine Identitätsspalte, die als generiert wurde. Immer generiert.
Identitätsspalten können in zwei Modi angelegt werden - immer generiert, dass nicht zugewiesen und standardmäßig generiert werden kann dass kann zugeordnet werden.


Bei Bedarf können Sie den Spaltenmodus und den Einsatz dann tun ändern können „wie es ist“.
Beachten Sie, dass dies möglicherweise doppelte Einträge in der Identitätsspalte erzeugt oder aufgrund von Einschränkungen fehlschlägt.

ALTER TABLE leaves_approval MODIFY **my_identity_column** GENERATED BY DEFAULT AS IDENTITY; 

Oder Sie können die Identitätsspalte von der INSERT-Liste auszuschließen sind (aber Sie werden die vollständige Spaltenliste, mit Ausnahme der Identitätsspalte angeben müssen), z.B. -

INSERT INTO leaves_approval (c1,c2,c3,c4,...) 
SELECT c1,c2,c3,c4 ... 
FROM requests_temp r 
WHERE r.civil_number = 33322 
     AND r.request_id = (SELECT Max(s.request_id) 
          FROM requests_temp s) 

Database SQL Language Reference - CREATE TABLE

ALWAYS If you specify ALWAYS, then Oracle Database always uses the sequence generator to assign a value to the column. If you attempt to explicitly assign a value to the column using INSERT or UPDATE, then an error will be returned. This is the default.

BY DEFAULT If you specify BY DEFAULT, then Oracle Database uses the sequence generator to assign a value to the column by default, but you can also explicitly assign a specified value to the column. If you specify ON NULL, then Oracle Database uses the sequence generator to assign a value to the column when a subsequent INSERT statement attempts to assign a value that evaluates to NULL.

Verwandte Themen