Oracle EBS的FND_CONCURRENT.WAIT_FOR_REQUEST卡住的问题

最近在做一个关于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) THEN
DBMS_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;

执行后就一直卡在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 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
					);
---------------------------------------在这里加上COMMIT语句就可以了
COMMIT;
DBMS_OUTPUT.PUT_LINE('--提交物料数据请求编号:' || V_REQUEST_ID || '--');
IF (V_REQUEST_ID <> 0) THEN
	DBMS_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;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值