问题标签 [ora-00001]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
oracle - 相同的 Oracle 数据库设置:其中一个异常
编辑:查看这个问题的结尾,了解导致错误的原因以及我是如何发现的。
当我运行一个将数据批量插入到 Oracle 数据库中的应用程序时,我从 Hibernate 中抛出了一个非常奇怪的异常。错误来自 Oracle 数据库ORA-00001,它
" 表示已尝试插入具有重复(唯一)键的记录。如果更新现有记录以生成重复(唯一)键,也会生成此错误。
该错误很奇怪,因为我在另一台机器上创建了相同的表(完全相同的定义),如果我通过我的应用程序使用它,我不会得到相同的错误。并且所有数据都被插入到数据库中,所以没有什么被真正拒绝。
两种设置之间必须有一些不同,但我能看到的唯一不同的是我在发布时得到的横幅输出
给我带来麻烦的数据库:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Prod
有效的数据库:
Oracle Database 10g Release 10.2.0.3.0 - 64bit Production
表定义、输入和我编写的应用程序对两者都是相同的。所涉及的表基本上是一个具有复合 id(serviceid、date、value1、value2)的四列表 - 没什么特别的。
关于什么可能是错的任何想法?我已经开始清理几次,删除两个表以平等地开始,但我仍然从数据库中得到错误。
更多的输出:
我如何找出导致问题的原因
感谢 APC 和 ik_zelf,我能够查明这个错误的根本原因。事实证明,Quartz 调度程序被错误地配置为生产数据库(出现错误的地方)。对于针对非故障 oracle 服务器<cronTriggerExpression>0/5 * * * * ?</cronTriggerExpression>
运行的作业,我每五秒运行一次批处理作业。我认为对于另一个 oracle 服务器来说,每分钟一次就足够了,并使用 * */1 * * * ? 设置了石英调度程序。事实证明这是错误的,而不是每分钟运行一次,而是每秒运行一次!
每个作业大约需要 1.5-2 秒,因此两个或多个作业同时运行,从而导致服务器上同时插入。因此,我没有插入 529 个元素,而是插入了 1000 到 2000 个元素。将 crontrigger 表达式更改为与另一个相同的表达式,每五秒运行一次,解决了该问题。
为了找出问题所在,我必须在 hibernate.cfg.xml 中设置 true 并禁用表上的主键约束。
sql - 触发器创建问题(来自主键序列)
我创建了一个从 1 开始的序列,没有最大值我已经创建了一个自动插入主键的触发器,它在下面我还为表设置了一个约束,其中主键必须是唯一的并且不为空
结果:
第 1 行的错误:
ORA-00001:违反了唯一约束 (USER.PK_MY_TEMP)
表 MY_TEMP 已经包含从 1 到 338 的值,来自 Id 字段
那么,我应该如何在触发器和插入语句中处理这个问题。
oracle - ORA-00001: 违反唯一约束 (DEV.X_PK)
我有一个将数据发送到 Web 服务的 java 代码,以及一个使用该数据的 portlet。
java代理发送的数据被放置在TMP表中,合并过程将其合并到portlet使用的MAIN表中。
运行 java 代理时出现以下错误,尽管我确保没有发送重复的主键:
我尝试关闭主键约束,但徒劳无功。然后我尝试删除所有使用的表,并再次创建它们。但还是没有运气...
有趣的是,我能够手动将数据插入 TMP 并运行合并过程,并且没有错误。
任何帮助表示赞赏...
hibernate - 休眠错误机制
我正在用hibernate + spring创建一个网站。在我的网站管理员中有一个用于添加工作的工作表。职位名称在数据库和休眠 xml 文件中声明为唯一。
当我尝试添加一个已经存在的职位时,由于独特的约束,作业没有成功添加,并且我的日志中出现异常。
我想知道有没有办法摆脱这个异常并显示一些用户友好的消息,比如“工作已经存在”?
我不想在插入之前扫描整个表,所以请建议我任何其他方式
oracle - oracle 序列变得混乱,因此插入失败?
我正在使用序列将域对象实例保存在我的 oracle 数据库中。我对数据库中的每个表都有一个序列。例如,当我在用户或资源上使用保存功能时,它在第一次尝试时创建了一个新资源,但使用的 ID 是 70?该序列显示了正确的下一个数字 - 42,因为表中的最大 id 为 41。为什么 id=70 用于插入新资源?
同样从下一次尝试所有插入都失败并出现此错误
不知道出了什么问题,因为这是在代码重组之后发生的......我们将代码移动到新包中......
编辑:我找到了原因,请参阅我的回复..谢谢大家
oracle - 约束违反异常 ORA-00001
我正在使用 Oracle 数据库。我们在调用我们的服务时经常看到失败。当我查看日志时,我在表上看到以下异常
java.sql.BatchUpdateException:ORA-00001:违反了唯一约束 (DBSCHEMA.IDX_CO_DETAILS)。
我检查了表上的索引以获取索引名称 DBSCHEMA.IDX_CO_DETAILS 。
它不包括任何列(INCLUDE_COLUMN 为空)。我怎么知道这个约束是为了什么?是主键约束吗?
我们将休眠用于 ORM。下面是休眠上下文中的回溯
sql - ORA-00001: 唯一约束检查数据源
执行过程时出现 ORA-00001:唯一约束错误。我检查了表名,它有四个主键。(a.sr_date, a.int_key, b.cli_no, b.act_no) from table1 a, table2 b 我想知道我将如何检查源表,以便知道导致问题。感谢任何帮助。谢谢你。
java - ORA 000001 违反唯一约束
我对具有 dep_id 和 emp_id 主键的表有一个插入语句。我的 java 程序为新记录生成一个新的 emp_id 并插入它。例如,如果我有 dep_id = 100 和 emp_id = 25,我无法插入 dep_id = 100 和 emp_id = 26 的记录,但我可以插入 dep_id = 100 和 emp_id = 27 的记录。我通过检查如果存在某种组合(dep_id = 100 和 emp_id = 26),则选择语句。没有那种东西。我仍然从 dep_id = 100 和 emp_id = 26 处删除并提交只是为了确定,然后尝试插入,但它仍然不起作用。可能有什么问题?以下是代码:修改后的 DDL 和 Insert 语句(从 Eclipse 控制台获得)
)
请注意,Insert 语句本身有另一个 Insert 语句作为值。这个插入语句(主要的)在应用程序的许多其他地方使用。另外,我使用 100 的 dep_id 是一个测试 dep_id。除了我,没有人使用它。
plsql - PlSQL 触发错误 ORA-0000 ORA-06512:
我一周创建了这个触发器,但没有编译错误但是当我输入一条记录时,EMP_REPORT
它会弹出一条错误消息说
我无法弄清楚我哪里出错了。请帮助我 :(
请注意,我无法删除约束及其主键
oracle - 由于 sequencel.nextval,PL/SQL(INSERT/UPDATE)触发器中的唯一约束违反错误
我想使用触发器(pl/sql oracle 10g)将记录插入/更新到另一个表(MICL_SUPERVISORS)。
当触发器触发时,它给出一个错误
ORA-00001: 违反了唯一约束。
我知道它发生是因为我想SUPID
从序列中添加
这发生在一个循环中。
SUPID 列是我表中的主键(MICL_SUPERVISOR)。所以我不能放弃那个约束。
一旦我尝试自动递增,但它需要很长时间,而且效果不佳而且速度很慢。我在这张表中有数千条记录。我这样做了
由于这个错误,我做了一个小的研究,发现我们不能在触发器中使用 seq.nextval。所以我的问题是有没有简单、准确的方法来实现这一目标?
这是代码(这一切都发生在if 子句else 部分工作正常。请注意我使用了游标,在打开游标内这一切都发生了)
如果有什么不清楚的地方问我,我会进一步解释这个场景,我希望有人能帮助解决这个问题