问题现象:
1、在更新A表的某一条记录S1、并且未提交;
2、然后再调用一个含有自治函数(procedure ***(serialno VARCHAR2,boType VARCHAR2) IS PRAGMA AUTONOMOUS_TRANSACTION;)的存储过程或函数,且该被调函数会更新A表的同一条记录S1;
此时会发生Oracle 系统报错“ORA-00060: 等待资源时检测到死锁”,
原因分析:
由于主调函数或过程中被更新的那条记录S1更新后未被提交,Oracle 会自动锁定该行数据,及发生行锁行为,被调函数再去更新已经被锁定的数据时会获取不到行锁,导致该错误的发生。
解决办法:不调用含有自治函数的函数或存储过程,将逻辑搬到主调函数中,和主调函数使用同一个事务。即可解决该错误