ORA 01400 和 ORA 02296: 无法插入 null 或将添加的列属性修改为 NOT NULL

2024-01-25

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

好吧,根据我的解释,我首先尝试通过编写脚本来添加该列:

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

Then:

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

SQL 错误:ORA-01400:não é possível inserir NULL em ("HR"."EMPLOYEES"."EMPLOYEE_ID") 01400. 00000 - “无法将 NULL 插入 (%s)”

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

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

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

但我仍然收到错误。

我尝试将列修改为不为空

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

And:

02296 00000 - “无法启用 (%s.%s) - 发现空值”
*原因:更改表启用约束失败,因为表
包含不满足约束的值。
*行动:明显

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

解决:

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将被分配给一个序列。这将为每个新记录自动插入一个自动递增的值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ORA 01400 和 ORA 02296: 无法插入 null 或将添加的列属性修改为 NOT NULL 的相关文章

随机推荐