FRM-40654的错误提示处理

今天制造模块上线,一到公司就碰到表死锁的问题,可是我到V$LOCKED_OBJECT查不到有这个表的锁住信息,郁闷至极了。
就采用不同方式的sql去判断,可是都无结果。
SELECT /*+ rule */ s.username, decode(l.type,'TM','TABLE LOCK', 'TX','ROW LOCK', NULL) LOCK_LEVEL, o.owner,o.object_name,o.object_type, s.sid,s.serial#,s.terminal,s.machine,s.program,s.osuser FROM v$session s,v$lock l,dba_objects o WHERE l.sid = s.sid AND l.id1 = o.object_id(+)
 and o.object_name='BOM_OPERATION_RESOURCES';
select vlo.*,aob.object_name,aob.owner from V$LOCKED_OBJECT vlo,ALL_OBJECTS aob
where vlo.OBJECT_ID=aob.object_id and aob.object_name='BOM_OPERATION_RESOURCES';
仔细想了想,如果是在这个表查出的锁记录一般不是报frm-40654提示,这个提示是form中才会有的。
所以打开rounting标准form,它的on-lock是写在form中的,并未写在后台。on-lock锁表一般是form中某个字段与之
相对应的后台字段的值不相等所致。而sequences这条记录对应多条的resource,前三条resource只要一修改就会提示,但
它的最后一条记录可以作修改,一比较,最后一条记录的attribute1,attribute2没有值,其它三条都是有值的,由此怀疑
是这二个字段的问题。再查别的item的routing,也是attribute1,attribute2有值就会提示frm-40654。这是原因引起来呢?
这些数据都是从外部导入,有可能字段中有异常字符?还是其它情况呢?继续在pl/sql中查询出这条记录观察这二个字段,发现
这二个字段中的末尾有空格,其它看不出什么异常。但在前台看并未空格,问题就出在这,前台它会去除空格而导致在on-lock中
AND ((Recinfo.attribute1 = :B_OP_RTGS.Attribute1)
OR ((Recinfo.attribute1 IS NULL)
AND (:B_OP_RTGS.Attribute1 IS NULL)))
AND ((Recinfo.attribute2 = :B_OP_RTGS.Attribute2)
OR ((Recinfo.attribute2 IS NULL)
AND (:B_OP_RTGS.Attribute2 IS NULL)))
的条件无法成立而因此把表锁住。
update 这个表
begin
update BOM_OPERATION_RESOURCES set attribute1=trim(attribute1),attribute2=trim(attribute2);
commit;
end;
再去修改这条记录,没有任何问题,呵呵,问题就此解决了。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/77580/viewspace-212821/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/77580/viewspace-212821/

你可能感兴趣的:(FRM-40654的错误提示处理)