Oracle EBS的FND_CONCURRENT.WAIT_FOR_REQUEST卡住的问题

来源:互联网 发布:征途2挂机网络超时 编辑:程序博客网 时间:2024/06/04 22:47

最近在做一个关于ERP的项目,其中涉及到了物料导入的内容,采用了提交请求(FND_REQUEST.SUBMIT_REQUEST)的方式进行导入。在导入的过程中遇到了一个问题:导入物料基本信息与分类信息是分作两次请求进行提交的,导入分类信息的请求必须是物料基本信息请求提交成功后才提交的,于是就用到了FND_CONCURRENT.WAIT_FOR_REQUEST来等待物料基本信息导入成功后再继续执行后续内容,但是用了这个方法之后就一直卡在这个位置一直不动,下面是具体代码:

DBMS_OUTPUT.PUT_LINE('-----------------提交物料数据请求!----------------');--提交请求V_REQUEST_ID := FND_REQUEST.SUBMIT_REQUEST(APPLICATION => 'INV', PROGRAM     => 'INCOIN', DESCRIPTION => 'CUX:', START_TIME  => SYSDATE, SUB_REQUEST => FALSE, ARGUMENT1   => master_org_id, -- ORGANIZATION ID ARGUMENT2   => 1, -- ALL ORGANIZATIONS ARGUMENT3   => 1, -- VALIDATE ITEMS ARGUMENT4   => 1, -- PROCESS ITEMS ARGUMENT5   => 1, -- DELETE PROCESSED ROWS          ARGUMENT6   => P_REQUEST_GRO_ID, -- PROCESS SET (NULL FOR ALL)  ARGUMENT7   => 1, -- CREATE OR UPDATE ITEMS  ARGUMENT8   => 1 -- GATHER STATISTICS );DBMS_OUTPUT.PUT_LINE('--提交物料数据请求结果:' || V_REQUEST_ID || '--');IF (V_REQUEST_ID <> 0) THENDBMS_OUTPUT.PUT_LINE('-----------------开始更新物料关联数据!----------------');V_FINISHED := FND_CONCURRENT.WAIT_FOR_REQUEST(REQUEST_ID => V_REQUEST_ID,INTERVAL   => 5,MAX_WAIT   => 0,PHASE      => V_PHASE,STATUS     => V_STATUS,DEV_PHASE  => V_REQUEST_PHASE,DEV_STATUS => V_REQUEST_STATUS,MESSAGE    => V_MESSAGE);IF UPPER(V_REQUEST_PHASE) = 'COMPLETE' AND UPPER(V_REQUEST_STATUS) = 'NORMAL' THENDBMS_OUTPUT.PUT_LINE('-----------------更新物料关联数据!----------------');END IF;END IF;

执行后就一直卡在FND_CONCURRENT.WAIT_FOR_REQUEST这个位置,一直没反应。经过在网上不断的找例子,最终发现在请求提交之后需要COMMIT一下,也就是说在FND_REQUEST.SUBMIT_REQUEST之后需要提交事务,具体的原因我猜测请求提交应该也是向某张表里面插入数据,因此事务没提交的时候,等待的请求是空的,而我又没有设置等待时间,就导致了一直卡在那儿,因此只需要加上COMMIT就好了。

下面是修改后的代码:

DBMS_OUTPUT.PUT_LINE('-----------------提交物料数据请求!----------------');--提交请求V_REQUEST_ID := FND_REQUEST.SUBMIT_REQUEST(APPLICATION => 'INV',PROGRAM     => 'INCOIN',DESCRIPTION => 'CUX:',START_TIME  => SYSDATE,SUB_REQUEST => FALSE,ARGUMENT1   => master_org_id, -- ORGANIZATION IDARGUMENT2   => 1, -- ALL ORGANIZATIONSARGUMENT3   => 1, -- VALIDATE ITEMSARGUMENT4   => 1, -- PROCESS ITEMSARGUMENT5   => 1, -- DELETE PROCESSED ROWS ARGUMENT6   => P_REQUEST_GRO_ID, -- PROCESS SET (NULL FOR ALL) ARGUMENT7   => 1, -- CREATE OR UPDATE ITEMS ARGUMENT8   => 1 -- GATHER STATISTICS);---------------------------------------在这里加上COMMIT语句就可以了COMMIT;DBMS_OUTPUT.PUT_LINE('--提交物料数据请求编号:' || V_REQUEST_ID || '--');IF (V_REQUEST_ID <> 0) THENDBMS_OUTPUT.PUT_LINE('-----------------开始更新物料关联数据!----------------');V_FINISHED := FND_CONCURRENT.WAIT_FOR_REQUEST(REQUEST_ID => V_REQUEST_ID,INTERVAL   => 5,MAX_WAIT   => 0,PHASE      => V_PHASE,STATUS     => V_STATUS,DEV_PHASE  => V_REQUEST_PHASE,DEV_STATUS => V_REQUEST_STATUS,MESSAGE    => V_MESSAGE);IF UPPER(V_REQUEST_PHASE) = 'COMPLETE' AND UPPER(V_REQUEST_STATUS) = 'NORMAL' THEN             DBMS_OUTPUT.PUT_LINE('-----------------更新物料关联数据!----------------');             /*.........*/        END IF;END IF;
阅读全文
1 0
原创粉丝点击