Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 随机ORA-01403:在同一查询中未找到数据_Oracle_Plsql - Fatal编程技术网

Oracle 随机ORA-01403:在同一查询中未找到数据

Oracle 随机ORA-01403:在同一查询中未找到数据,oracle,plsql,Oracle,Plsql,我有一个从java执行的PL/SQL包,其中包含一个SELECT INTO语句,该语句随机返回NODATA found exception。如果我在出错后再次调用包,它可能会成功运行 观察 对于2个活动用户,错误计数几乎为0(300次执行中有2个错误) 对于更活跃的应用程序用户,几乎每次执行都失败(每10次执行9个错误) 表有一个before insert触发器,它也会失败,但很少失败 表经常更新,但我们查询的行在执行期间不会更新(包生成报告) 尝试过的解决方案 将选择替换为光标 在一个循环中以

我有一个从java执行的PL/SQL包,其中包含一个SELECT INTO语句,该语句随机返回NODATA found exception。如果我在出错后再次调用包,它可能会成功运行

观察

  • 对于2个活动用户,错误计数几乎为0(300次执行中有2个错误)

  • 对于更活跃的应用程序用户,几乎每次执行都失败(每10次执行9个错误)

  • 表有一个before insert触发器,它也会失败,但很少失败

  • 表经常更新,但我们查询的行在执行期间不会更新(包生成报告)

  • 尝试过的解决方案

  • 将选择替换为光标
  • 在一个循环中以5秒的延迟执行同一查询5次
  • 错误仍然随机发生

    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次相同的查询。我可以知道为什么它被否决了吗?