Oracle 随机ORA-01403:在同一查询中未找到数据
我有一个从java执行的PL/SQL包,其中包含一个SELECT INTO语句,该语句随机返回NODATA found exception。如果我在出错后再次调用包,它可能会成功运行 观察Oracle 随机ORA-01403:在同一查询中未找到数据,oracle,plsql,Oracle,Plsql,我有一个从java执行的PL/SQL包,其中包含一个SELECT INTO语句,该语句随机返回NODATA found exception。如果我在出错后再次调用包,它可能会成功运行 观察 对于2个活动用户,错误计数几乎为0(300次执行中有2个错误) 对于更活跃的应用程序用户,几乎每次执行都失败(每10次执行9个错误) 表有一个before insert触发器,它也会失败,但很少失败 表经常更新,但我们查询的行在执行期间不会更新(包生成报告) 尝试过的解决方案 将选择替换为光标 在一个循环中以
BEGIN
t_utility.init( p_log_level => '70', p_application => 'MFG', p_exe_reqst_id => p_cut_id);
t_utility.info('Report Begins'||p_cut_id||' '||p_report_size);
FOR i IN 1..5
LOOP
BEGIN
-- Fecthing the header details
SELECT div.divisiont_code
, fac.facility_code
, cut_reg.cut_num
, cut_reg.lay_date
, cut_reg.revision_number
, cut_reg.shrinkage
, cut_reg.document_no
, cut_reg.marker_name_method
INTO l_division
, l_facilty
, l_doc_no
, l_date
, l_rev
, l_shrinkage
, l_cut_reg_num
, l_marker_name
FROM mfg.cut_regstr cut_reg
, tnz.division div
, tnz.facility fac
WHERE cut_reg.op_code = 'C'
AND div.id = cut_reg.division
AND fac.id(+) = cut_reg.facility
AND cut_reg.cut_regstr_id = p_cut_id; --p_cut_id is an input parameter;
l_exit_flag := 1;
EXCEPTION
WHEN no_data_found THEN
t_utility.error('Header '||sqlerrm);
--raise l_abort_package_exe;
l_exit_flag := 0;
WHEN OTHERS THEN
t_utility.error('Header '||sqlerrm);
l_exit_flag := 0;
-- raise l_abort_package_exe;
END;
IF l_exit_flag = 1 THEN
EXIT;
END IF;
sys.DBMS_LOCK.sleep (5);
END LOOP;
IF l_exit_flag = 0 THEN
t_utility.error('Completed 5 iterations but result not found');
raise l_abort_package_exe;
END IF;
问题在于VPD(虚拟专用数据库)上下文。禁用VPD后,一切正常
我相信VPD上下文由于连接池中的冲突而失败,因为问题只在多个用户会话处于活动状态时发生。同时提供包体。告诉我们您已经尝试了什么?@JSapkota很抱歉延迟响应。请在编辑中找到包正文的开头。@AvrajitRoyi尝试了以下操作。将“选择到”替换为“光标”。在一个循环中以5秒的延迟执行了5次相同的查询。我可以知道为什么它被否决了吗?