oracle9i中存储过程执行的怪问题
create or replace procedure FAULT_ARCHFAULTINFO_PROC( sh_no in varchar2)
as
v_flow_inst number;
begin
select PROCESSINSTID into v_flow_inst
from FAULT_SHEET_TD where SHEET_NO=sh_no;
insert into HISFAULT_SHEET_TD
(select * from FAULT_SHEET_TD where SHEET_NO=sh_no);
......
......
......
delete from FAULT_SHEET_TD where SHEET_NO=sh_no;
commit;
end FAULT_ARCHFAULTINFO_PROC;
上面的一个存储过程是一个将记录归档的存储过程,就是把某张运行表的记录导入历史表,再将运行表中的记录删除。
现在出现的问题是,我通过
select count(a.SHEET_NO) from fault_sheet_td a, hisfault_sheet_td b
where a.sheet_no=b.sheet_no
发现在运行表里和历史表里存在不少相同SHEET_NO的记录!!!注意,SHEET_NO字段在运行表和历史表都是主键。同一SHEET_NO的记录要么在运行表,要么被归档到历史表,不可能同时出现在两张表中。
如果单是这样,还可以说是我的存储过程没有明确的开始事务造成的。但是我发现,在运行表中的记录,和历史表中的记录相比,有几个字段的值是空的,而且固定就是那几个字段,其他字段值和历史表中完全一样。
如果只是事务问题,那么我delete运行表时,也不至于有的字段的值被删掉了,有的字段的值还存在啊。
忒奇怪了,请高手相助!!!
------解决方案--------------------是不是中间有报错
两个表结构完全一样吗
自己用TOAD跟踪一下
------解决方案--------------------请从程序流程控制角度查原因,事务问题不大可能。
------解决方案--------------------写触发器记录一下,然后对比一下每次的操作细节。
------解决方案--------------------以上各位都说的很对,请照做以后再反馈