-2

我正在使用 ATG 应用程序。今天,我在 /atg/userprofiling/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 查询?

4

1 回答 1

0

您没有添加您尝试运行的实际 sql,但错误消息几乎说明了一切。您正在违反unique约束。

假设您有一个名为的表Foo和一个名为 的uniquebar。如果您打算向 中插入一条记录Foo,其bar值为,那么如果您的表已经有一条值为的记录'loremipsum',则该语句将不会成功。Foobar'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)
于 2014-11-19T13:53:51.803 回答