我正在处理一个ATG应用程序。今天,我在/atg/userproprofile/ProfileAdapterRepository 中得到了以下 SQL 异常,这是因为违反了唯一约束。
atg.repository.RepositoryException; SOURCE:java.sql.SQLIntegrityConstraintViolationException: ORA-00001: unique constraint (DCS_USR_ACTVPROM_P) violated
执行 ATG 的用户升级表dcs_usr_actvpromo的插入查询时发生异常。我搜索了执行此查询的时间和地点,传递了哪些值,但直到现在我都找不到。
atg.scenario.userprofiling.ScenarioProfileFormHandler 的handleLogin 方法已从自定义 FormHandler 调用。在此方法调用后我找不到流。此方法调用后,将发生异常。
任何人都可以让我知道此方法内部发生了什么以及从上表中的 ATG 中执行 SQL 查询的位置?
您没有添加尝试运行的实际 sql,但错误消息几乎说明了一切。您违反了unique
约束。
假设您有一个名为 Foo
的表,并且您有一个名为 bar
的unique
列。如果您打算将一条记录插入到 Foo
中,bar
值为 'loremipsum'
,那么如果您的Foo
表中已经有一条记录,其中 bar
的值为 'loremipsum'
时,该语句将不会成功。
因此,insert
:
insert into Foo(bar)
values('loremipsum');
有失败的风险。为了防止这种风险发生,您必须检查该值是否已存在,如下所示:
insert into Foo(bar)
select 'loremipsum'
from Foo
where 'loremipsum' not in (select distinct bar from Foo)