gpt4 book ai didi

oracle - ORA 01400 和 ORA 02296 : Cannot insert null or modify added column properties to NOT NULL

转载 作者:行者123 更新时间:2023-12-04 03:21:07 25 4
gpt4 key购买 nike

“修改您的查询以添加一个从新薪水中减去旧薪水的列。标记列增加。运行修改后的查询。”

嗯,根据我的解释,我首先尝试通过脚本添加列:

ALTER TABLE EMPLOYEES ADD (
INCREASE2 NUMBER(6));

然后:

INSERT INTO EMPLOYEES(INCREASE2)
SELECT (salary*1.155) - salary FROM EMPLOYEES;

Error de SQL: ORA-01400: não é possível inserir NULL em ("HR"."EMPLOYEES"."EMPLOYEE_ID") 01400. 00000 - "cannot insert NULL into (%s)"

"HR"."EMPLOYEES"."EMPLOYEE_ID" 是主键。

  1. 我不是要插入 NULL 值;
  2. 我不知道为什么 oracle 不接受我的条目。我试图通过执行基本插入来检查我的表达式中是否存在任何语法错误:

    INSERT INTO EMPLOYEES(INCREASE2)
    VALUES ('whatever');

但我仍然遇到错误。

然后我尝试将列修改为非空

ALTER TABLE EMPLOYEES
MODIFY
(INCREASE2 NUMBER(6) NOT NULL);

和:

02296 00000 - "cannot enable (%s.%s) - null values found"
*Cause: an alter table enable constraint failed because the table
contains values that do not satisfy the constraint.
*Action: Obvious

我找到了一个简单的练习解决方案,但我仍然很好奇为什么我的代码没有成功。

解决方案:

SELECT employee_id, last_name, salary,
ROUND(salary * 1.155, 0) "New Salary",
ROUND(salary * 1.155, 0) - salary "Increase"
FROM employees;

最佳答案

您的代码没有成功,因为 employees.employee_id 列是一个没有默认值的非空字段。当你运行时:

INSERT INTO EMPLOYEES(INCREASE2)
VALUES ('whatever');

Employees 中所有其他字段的值都分配有默认值,如果不存在默认值,则为NULL。因为这违反了约束,所以会出现错误。

通常,像employee_id 这样的字段会被分配给一个序列。这会自动为每个新记录插入一个自动递增的值。

关于oracle - ORA 01400 和 ORA 02296 : Cannot insert null or modify added column properties to NOT NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20817280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com