SQL 语句在 ATG 中失败



我正在处理一个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 的表,并且您有一个名为 barunique列。如果您打算将一条记录插入到 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)

相关内容

  • 没有找到相关文章

最新更新