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 的相关文章

  • ORA-12170: TNS: 发生连接超时

    我尝试使用 Oracle Toad 连接到笔记本电脑中的数据库 但仍然出现此错误 ORA 12170 TNS 发生连接超时 我不断出现此错误的可能原因是什么 我昨天访问了同一个数据库并且能够访问它 收集评论里的答案 问题是Oracle服务运
  • Oracle/SQL中ROWID的数据类型

    Oracle SQL中ROWID的数据类型是什么 这个值是如何存储的 以下链接解释了 ROWID 的数据类型是什么 ROWID 数据类型 http docs oracle com cd B19306 01 server 102 b14200
  • HTML 实体解码为特殊字符

    我想在输出中显示特殊符号 例如 我的文本可能包含实体代码 例如 lt gt ETC 我想将其显示为 lt gt 在我的输出中 我需要在 SQL 中执行此操作 我用谷歌搜索了这个并得到了一个函数 select dbms xmlgen conv
  • 如何使用 Oracle 清理死连接?

    现在 我正在针对 Oracle 数据库开发一些新应用程序 有时它们会崩溃或无法正确结束 等等 无论如何 问题是它们有时似乎保持连接打开 我需要在它们之后进行清理 我的问题是 是否有一种方法可以从数据库端确定死连接并清理它们 这是一个页面 涉
  • 从浏览器小程序使用 JDBC 时出现“访问被拒绝”

    我有一个 Java 小程序 可以查询 Oracle 数据库中的数据 当从 IDE 内部运行时 它运行得很好 但是 当我将它作为嵌入网页中的小程序运行时 我在类加载器中收到 访问被拒绝 错误 并且我根本不知道它对我的要求是什么 Sep 06
  • Oracle中如何通过XPath获取第一个元素

    在我的 Oracle 数据库中 我有这样的记录
  • 为什么 where 子句中不允许使用聚合函数

    我正在寻求对此的澄清 我在下面写了两个查询 我们有一个员工姓名表 其中包含 ID 姓名 薪水列 1 Select name from employee where sum salary gt 1000 2 Select name from
  • 获取表的某些列只有空值

    我需要知道一张表的哪些列只有空值 我知道我应该在 user tab columns 中执行循环 但是如何仅检测具有空值的列呢 感谢并抱歉我的英语 要在事先不知道列标识的情况下执行查询 需要使用动态 SQL 假设您已经知道该表不为空 您可以执
  • SQL 日期转换结果为“无效的数字格式模型参数”。

    我必须select一些数据来自Oracle 11g数据库 但我似乎不明白为什么以下select查询失败 SELECT INFO ID INFO DETAIL IMPORTANT FLG DELETE FLG CREATE TIME DISP
  • 最新的 Open JDK 8 JAXB 库无法解组具有包含换行符的属性的对象

    我在 Ubuntu 16 04 上使用 Java 最近我升级到使用 oracle java8 installer 包 包版本 8u161 1 webupd8 0 安装的 Open JDK java 版本 1 8 0 161 自从进行此升级以
  • 如何在Tomcat 7.0.47启动时注册oracle jdbc驱动程序?

    我将ojdbc6 jar复制到tomcat安装文件夹中的lib文件夹中 当我部署在 JDBC 连接中使用 Oracle 驱动程序的 Web 应用程序时 服务器说找不到驱动程序类 我被迫手动执行 DriverManager registerD
  • oracle sql if条件然后选择语句1 else选择语句2

    我有参数 prmtr我想要的是根据参数输入使用 select 语句 我试过这个 if prmtr A then select from tblA else select from tblB end if 但这是行不通的 还有其他方法可以做到
  • 这是 Oracle 可能的错误还是我遗漏了什么?

    数据库是 Oracle 10 2 0 1 0 64 位 在 Red Hat Enterprise Linux ES 第 4 版 Nahant 更新 8 上运行 在 SQL Plus 中 以下代码可以完美运行 var comment id n
  • 如何 UPSERT(更新或插入表?)

    UPSERT 操作更新或插入表中的行 具体取决于表是否已有与数据匹配的行 if table t has a row exists that has key X update t set mystuff where mykey X else
  • 如何在H2中定义Oracle Package procedure进行测试

    我正在测试一个 Spring Boot 应用程序 该应用程序将数据读取 写入 Oracle DB 该 Oracle DB 具有 Oracle 包以及这些包中的过程 在某些时候 Spring Boot应用程序通过实体存储库调用此过程 如下所示
  • Oracle 10g 内连接的 0RA-00952

    这有效 SELECT PRODUCT INFOS FIELD VALUE PRODUCT INFOS COIL ID SYSTEM PRODUCT INFOS TIME STAMP PRODUCT INFOS FIELD NAME FROM
  • Oracle 日期索引很慢。没有它查询速度快 300 倍

    我有一个 Oracle 查询 如下所示 运行时间为 10 分钟或更长时间 select r range text as duration range nvl count c call duration 0 as calls nvl SUM
  • 防止 sqlplus 截断列名,无需单独的列格式

    默认情况下 sqlplus 将列名截断为基础数据类型的长度 我们数据库中的许多列名称都以表名称为前缀 因此在截断时看起来相同 我需要在锁定的生产环境中向远程 DBA 指定 select 查询 并拖回假脱机结果以进行诊断 列太多 无法指定各个
  • 没有 if 条件(动态查询)或乱码的Where子句中的PreparedStatement“为null”

    假设我有这样的查询 SELECT FROM CUSTOMERS WHERE CUSTOMER ID 使用PreparedStatement 我可以绑定变量 pstmt setString 1 custID 但是 我无法通过以下绑定获得正确的
  • 如何找到与日期范围最重叠的时间段

    假设您有一个包含标识符 开始时间和结束时间的表 这些开始和结束时间可以是任意时间长度 开始时间始终早于结束时间 假设没有空值 什么样的查询会告诉我最 流行 的时间 即每行中的两个范围与大多数其他行重叠的位置 它的实际应用是它是一个记录用户登

随机推荐