【发布时间】:2013-10-07 14:52:05
【问题描述】:
我有以下触发器,可确保只有一条记录具有字段 DEFAULTCARD=1
create trigger TRG_U_XSTRDCRD
after update on XSTOREDCARD referencing new as N old as O
for each row mode db2sql
begin atomic
if N.DEFAULTCARD = 1 then
update XSTOREDCARD
set DEFAULTCARD = 0
where USERS_ID = N.USERS_ID and ID <> N.ID;
end if;
end@
我还想确保只有一条记录的 EBACTIVE 字段值为 1,所以我尝试了这个。
create trigger TRG_U_XSTRDCRD
after update on XSTOREDCARD referencing new as N old as O
for each row mode db2sql
begin atomic
if N.DEFAULTCARD = 1 then
update XSTOREDCARD
set DEFAULTCARD = 0
where USERS_ID = N.USERS_ID and ID <> N.ID;
end if;
if N.EBACTIVE = 1 then
update XSTOREDCARD
set EBACTIVE = 0
where USERS_ID = N.USERS_ID and ID <> N.ID;
end if;
end@
但它不起作用,导致更新几分钟后超时:
Caused by: com.ibm.db2.jcc.b.SqlException: DB2 SQL error: SQLCODE: -101, SQLSTATE: 54001, SQLERRMC: null
at com.ibm.db2.jcc.b.zc.e(zc.java:1606)
at com.ibm.db2.jcc.b.zc.a(zc.java:1206)
at com.ibm.db2.jcc.a.db.h(db.java:149)
at com.ibm.db2.jcc.a.db.a(db.java:43)
at com.ibm.db2.jcc.a.r.a(r.java:30)
at com.ibm.db2.jcc.a.sb.g(sb.java:152)
at com.ibm.db2.jcc.b.zc.n(zc.java:1186)
at com.ibm.db2.jcc.b.ad.db(ad.java:1761)
at com.ibm.db2.jcc.b.ad.d(ad.java:2203)
at com.ibm.db2.jcc.b.ad.V(ad.java:521)
at com.ibm.db2.jcc.b.ad.executeUpdate(ad.java:504)
at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2595)
... 19 more
有什么错误或如何做的建议吗?
干杯! NFV
【问题讨论】:
-
请显示准确的错误代码和完整的信息。
-
SQLCODE -101 不是超时;这意味着您正在达到内存限制或其他一些资源限制。由于您没有提到您的 DB2 版本和平台,因此我无法提供更多详细信息。与您的 DBA 交谈。
-
以下页面可能会给您一些提示。 dbforums.com/db2/…