我在 oracle 中有一个存储过程,可以从 8-10 个表中删除行。我必须从说表“人”中删除一行。它有很多关系,如“Person_Health”、“Person_Claims”、“Person_Bills”等。同样,子表与其他表有关系。
我写了一个存储过程,循环遍历子表删除子记录,最后删除父表中的记录。我没有使用任何类型的锁定/等待机制(我是初学者,不确定使用哪一个)
有时,此过程会失败。翻译带有 SQL 状态“61000”、错误代码“60”、消息 [ORA-00060: 在等待资源时检测到死锁的 SQLException
问题是,由于在执行此存储过程时从应用程序的不同部分访问这些表的(选择/插入/更新)请求,它经常失败。
有没有办法在删除时单独锁定表?或者有没有其他更好的方法来做到这一点。
注意:一种方法可能是为这些表设置“ ON DELETE CASCADE ”,这将自动删除子记录,但这是不可能的。