ORA-01400 und ORA 02296 : Cannot insert null oder ändern Hinzugefügt-Spalte Eigenschaften NICHT NULL
"Ändern Sie Ihre Abfrage, um eine Spalte hinzuzufügen, die subtrahiert die alten Gehalt vom neuen Gehalt.
Beschriften Sie die Spalte Erhöhen. Führen Sie das überarbeitete Abfrage."
Gut, nach meiner interpretation, ich versuchte zunächst, um die Spalte hinzuzufügen, indem Sie Skripts:
ALTER TABLE EMPLOYEES ADD (
INCREASE2 NUMBER(6));
Dann:
INSERT INTO EMPLOYEES(INCREASE2)
SELECT (salary*1.155) - salary FROM EMPLOYEES;
Fehler de SQL: ORA-01400: não é possível inserir NULL-em ("HR"."Die MITARBEITER"."Feld "employee_id"")
01400. 00000 - "cannot insert NULL into (%s)"
"HR"."EMPLOYEES"."EMPLOYEE_ID"
ist der Primärschlüssel.
- Ich versuche nicht zu insert einen NULL-Wert;
-
Ich weiß nicht, warum oracle nicht akzeptieren, meine Einträge. Ich habe versucht, um zu überprüfen, ob es irgendeinen syntax-Fehler in meinem Ausdruck durch grundlegende einfügen:
INSERT INTO EMPLOYEES(INCREASE2) VALUES ('whatever');
Und trotzdem bekam ich den Fehler.
Ich habe versucht, ändern dann die Spalte nicht null
ALTER TABLE EMPLOYEES
MODIFY
(INCREASE2 NUMBER(6) NOT NULL);
Und:
02296 00000 - "nicht aktivieren (%s.%s) - null-Werte"
*Ursache: ein alter table aktivieren-Einschränkung ist fehlgeschlagen, da die Tabelle
enthält Werte, die nicht um die Einschränkung.
*Aktion: Offensichtlich
Fand ich eine einfache Lösung für die übung, aber ich bin neugierig, warum mein code nicht gelingen.
Auflösung:
SELECT employee_id, last_name, salary,
ROUND(salary * 1.155, 0) "New Salary",
ROUND(salary * 1.155, 0) - salary "Increase"
FROM employees;
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihren code nicht gelingen, weil die Spalte
employees.employee_id
ist ein nicht-null-Feld ohne default-Wert. Wenn Sie ausführen:Die Werte aller anderen Felder in
Employees
zugeordnet sind, die Standard-oderNULL
wenn kein default-Wert vorhanden ist. Denn dies verstößt gegen eine Einschränkung, erhalten Sie eine Fehlermeldung.Normalerweise ein Feld wie
employee_id
würde zugewiesen werden, um eine Sequenz. Dies würde automatisch legen Sie eine auto-increment-Wert für jeden neuen Datensatz.Wäre dies nicht ein update, nicht um eine insert? Das einfügen neuer Datensätze macht für mich keinen Sinn im Zusammenhang mit dem Auffüllen einer neuen Spalte, die Sie gerade Hinzugefügt haben.
Ich nehme an, Sie missverstanden die Aufgabe: "Ändern Ihre Abfrage, um eine Spalte hinzuzufügen, die subtrahiert die alten Gehalt vom neuen Gehalt. Beschriften Sie die Spalte Erhöhen. Laufen die überarbeitet Abfrage."
Also Ihre Letzte Auflösung sollte in Ordnung sein, Sie nicht zu verändern die tatsächliche Tabelle.