日期:2014-05-16  浏览次数:20817 次

Oracle外键delete
asset_position表
asset_position_oid   account_no   facility_pool_oid   client_group_oid
1001                   A1            2001                3001
1002                   A2            2002                3002

asset_position_ts表
asset_position_ts_oid  asset_position_oid   account_no   facility_pool_oid   client_group_oid
4001                    1001                   A4            2002                3002
4002                    1003                   A3            2002                3002

若asset_position_ts的asset_position_oid在asset_position不存在,则插入:insertMS()
若asset_position_ts的asset_position_oid在asset_position存在,则更新:   updateMS()
若asset_position的asset_position_oid在asset_position_ts不存在,则删除: deleteMS()

所以最后asset_position表中的记录如下
asset_position_oid   account_no   facility_pool_oid   client_group_oid
1003                   A3            2002               3002
1001                   A4            2002               3002

可是现在出现的问题是若执行完insertMS(),updateMS(),deleteMS()后再commit,本需要update的1001那条记录不存在了
若insertMS(),updateMS() 后commit,再deleteMS(),记录就是正确的

为何呢,其中facility_pool_oid 为2001,client_group_oid 为3001的记录在对应主表中被删除,但facility_pool_oid 为2002,client_group_oid 为3002的记录在对应主表中是存在的




------解决方案--------------------
原因是因为update前,那笔记录已经被删除了