Plsql DBMS_ALERT.WAITANY会挂起一段时间

Plsql DBMS_ALERT.WAITANY会挂起一段时间,plsql,Plsql,我有一份工作,它将提交n份其他工作。我已经设置了pl/sql过程,以便使用dbms_alert.register注册n个作业。每个作业都将发送dbms_alert.signal。信号发出后,我立即发出了一份承诺 但有时它会挂在处理它们的服务器上。下面是同样的代码片段。所有警报/作业都会更新或插入到不同的表中。他们可能需要使用select查询来获取相同或不同表的数据/记录。任何人都可以找到导致服务器上出现此挂起问题的原因 FUNCTION GenBociCltStm RETURN NUMBER

我有一份工作,它将提交n份其他工作。我已经设置了pl/sql过程,以便使用dbms_alert.register注册n个作业。每个作业都将发送dbms_alert.signal。信号发出后,我立即发出了一份承诺

但有时它会挂在处理它们的服务器上。下面是同样的代码片段。所有警报/作业都会更新或插入到不同的表中。他们可能需要使用select查询来获取相同或不同表的数据/记录。任何人都可以找到导致服务器上出现此挂起问题的原因

FUNCTION GenBociCltStm  RETURN NUMBER
            .......
            .........
             .......
        -- The following can be executed in any order (and in parallel)
        dbms_alert.register('CltMstAlert');
        dbms_alert.register('TrdPstAlert');
        dbms_alert.register('TrdLegAllAlert');
        dbms_alert.register('CrpActPstAlert');
        dbms_alert.register('SttPstAlert');
        dbms_alert.register('StkMovAlert');
        dbms_alert.register('StkHldAlert');
        dbms_alert.register('IntAlert');
        dbms_alert.register('TermLoanAlert');

        dbms_job.submit ( l_job,
                            ' BEGIN 
                PkgBociCltStmGen.GenBociCltStmCltMst; 
                exception when others then 
                    NULL;
                  END;
               dbms_alert.signal(''CltMstAlert'', ''GenBociCltStmCltMst Complete''); commit;',
               SYSDATE
               );

        dbms_job.submit ( l_job,
                            ' BEGIN 
                PkgBociCltStmGen.GenBociCltStmTrdPst; 
                exception when others then 
                    NULL;
                  END;
               dbms_alert.signal(''TrdPstAlert'', ''GenBociCltStmTrdPst Complete''); commit;',
               SYSDATE
               );

        dbms_job.submit ( l_job,
                            ' BEGIN 
                PkgBociCltStmGen.GenBociCltStmTrdLegAll; 
                exception when others then 
                    NULL;
                  END;
               dbms_alert.signal(''TrdLegAllAlert'', ''GenBociCltStmTrdLegAll Complete''); commit;',
               SYSDATE
               );

        dbms_job.submit ( l_job,
                            ' BEGIN 
                PkgBociCltStmGen.GenBociCltStmCrpActPst; 
                exception when others then 
                    NULL;
                  END;
               dbms_alert.signal(''CrpActPstAlert'', ''GenBociCltStmCrpActPst Complete''); commit;',
               SYSDATE
               );

        dbms_job.submit ( l_job,
                            ' BEGIN 
                PkgBociCltStmGen.GenBociCltStmSttPst; 
                exception when others then 
                    NULL;
                  END;
               dbms_alert.signal(''SttPstAlert'', ''GenBociCltStmSttPst Complete''); commit;',
               SYSDATE
               );

        dbms_job.submit ( l_job,
                            ' BEGIN 
                PkgBociCltStmGen.GenBociCltStmStkMov; 
                exception when others then 
                    NULL;
                  END;
               dbms_alert.signal(''StkMovAlert'', ''GenBociCltStmStkMov Complete''); commit;',
               SYSDATE
               );

        dbms_job.submit ( l_job,
                            ' BEGIN 
                PkgBociCltStmGen.GenBociCltStmStkHld; 
                exception when others then 
                    NULL;
                  END;
               dbms_alert.signal(''StkHldAlert'', ''GenBociCltStmStkHld Complete''); commit;',
               SYSDATE
               );

        dbms_job.submit ( l_job,
                            ' BEGIN 
                PkgBociCltStmGen.GenBociCltStmInt; 
                exception when others then 
                    NULL;
                  END;
               dbms_alert.signal(''IntAlert'', ''GenBociCltStmInt Complete''); commit;',
               SYSDATE
               );

    dbms_job.submit ( l_job,
                            ' BEGIN 
                PkgBociCltStmGen.GenBociCltStmTrmLon; 
                exception when others then 
                    NULL;
                  END;
                    dbms_alert.signal(''TermLoanAlert'', ''GenBociCltStmTrmLon Complete''); commit;',
                            SYSDATE
                            );
        commit;
         ......
         ......
         ......

        LOOP
            DBMS_ALERT.WAITANY(l_name, l_msg, l_status,6000);

            IF g_debug THEN
                SP_DEBUGLOG('===> alert '|| l_name,FALSE);
            END IF;

            l_counter := l_counter - 1;
            IF l_counter = 0 THEN
                EXIT;
            END IF;
        END LOOP;

任何建议都将不胜感激

当你说它挂起时,你的意思是它没有像预期的那样响应信号吗?它应该“挂起”。我认为简化的测试用例和一些格式化会得到更好的答案。基本上我们从C++代码中调用这个包。当它挂起时,它永远不会返回到C++代码。它就是这样挂着的