我正在使用Oracle数据库.我们看到我们的服务电话频繁失败.当我查看日志时,我看到桌子上有例外情况
java.sql.BatchUpdateException:ORA-00001:违反了唯一约束(DBSCHEMA.IDX_CO_DETAILS).
我已经检查了表中索引名称DBSCHEMA.IDX_CO_DETAILS的索引.
它不包含任何列(INCLUDE_COLUMN为null).我怎么知道这个约束是什么?它是主键约束吗?
我们正在使用hibernate进行ORM.下面是hibernate上下文中的后向跟踪
Caused by: org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:94)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:266)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:365)
Run Code Online (Sandbox Code Playgroud) 我正在使用Oracle数据库,我有一个客户记录表,并希望在多个varchar2列上放置一个唯一键约束.喜欢
CUST_ID (Number)
,
CUST_Name(varchar2),
Run Code Online (Sandbox Code Playgroud)
Cust_N.I.C_NO(varchar2)
将制作一个独特的钥匙.
当通过表单6i插入新记录时,如果ORA-00001
出现错误,将通知用户它是DUPLICATED
记录.
如果此表中的记录超过50000或更多,请告知我是否存在任何数据库性能问题.
如果这不是一个避免插入重复记录的好习惯,那么请建议任何其他方法.
问候.
我有一个使用 MERGE 的 PL/SQL 过程:
MERGE INTO
table_dest d
USING
(SELECT * FROM my_Table) s
ON
(s.id = d.id)
when matched then UPDATE set d.col1 = s.col1
when not matched then INSERT (id, col1) values (s.id, s.col1);
Run Code Online (Sandbox Code Playgroud)
现在假设查询s
返回具有相同 id 的多行,这将返回ORA-00001: unique constrain 错误
我想要做的是将重复的列发送到另一个表my_Table_recyledbin以获得成功的 INSERT,我可以使用吗EXCEPTION WHEN DUP_VAL_ON_INDEX
?如果是,如何将其与 MERGE 语句一起使用?
提前致谢
我有一个包含两个数字列的表,以及对它们的唯一约束.我想插入一对新的值,除非该对已经存在.最简单的方法是什么?
如果我做
insert into TABLE values (100,200)
Run Code Online (Sandbox Code Playgroud)
并且该对已经存在我得到ORA-00001错误,所以我想做类似的事情
insert or update into TABLE values (100,200)
Run Code Online (Sandbox Code Playgroud)