首页 > 技术文章 > PLSQL 控制子请求分组运行,且限制请求数量

zjm0506 2021-07-06 15:18 原文

--主请求调用子请求提交的时候,在循环传参中再调用子程序提交子请求;

--RETURN:满足条件后结束当前子程序,不往后执行;

--EXIT:只能在循环中使用,且只是结束当前循环,继续往下执行下一条循环;

1.主方法中循环传参:

FOR r_Rt_Org IN Rt_Org LOOP
Request_Schedule(p_Ou_Name => r_Rt_Org.Ou_Name
,x_Request_Id => l_Request_Id
,x_Return_Code => l_Status);
Log_File('l_request_id/customer_org_id/costomer_org_name:'
,l_Request_Id || '/' || r_Rt_Org.Organization_Id || '/' ||
r_Rt_Org.Ou_Name);
IF (l_Status = Fnd_Api.g_Ret_Sts_Unexp_Error) THEN
Log_File('l_request_id submit failed:');
ELSE
Log_File('l_request_id submit success:');
END IF;
END LOOP r_Rt_Org;

2.子程序中循环提交请求

FOR i IN 1 .. g_Work_Number LOOP
IF g_Request_Tab(i) = Fnd_Api.g_Miss_Num THEN
g_Request_Tab(i) := Fnd_Request.Submit_Request('RY'
,'RYOMRTOMTOPO'
,NULL
,NULL
,FALSE
,NULL --p_from_operate_unit IN NUMBER,
,NULL --p_so_header_id IN NUMBER,
,NULL --p_customer_po_number IN VARCHAR2,
,p_Ou_Name --p_current_ou_name IN VARCHAR2 DEFAULT NULL,
,'Y' --p_submit_rcv_request IN VARCHAR2,
,'Y' --p_submit_order_import IN VARCHAR2
,Chr(0));
Log_File('i: '
,i);
Log_File('request_id: '
,g_Request_Tab(i));
x_Request_Id := g_Request_Tab(i);
COMMIT;
RETURN;
END IF;
Dbms_Lock.Sleep(10);
END LOOP;
--if the max number of requests were run then wait one complete and submit request
WHILE TRUE LOOP
FOR i IN 1 .. g_Work_Number LOOP
IF g_Request_Tab(i) = Fnd_Api.g_Miss_Num THEN
g_Request_Tab(i) := Fnd_Request.Submit_Request('RY'
,'RYOMRTOMTOPO'
,NULL
,NULL
,FALSE
,NULL --p_from_operate_unit IN NUMBER,
,NULL --p_so_header_id IN NUMBER,
,NULL --p_customer_po_number IN VARCHAR2,
,p_Ou_Name --p_current_ou_name IN VARCHAR2 DEFAULT NULL,
,'Y' --p_submit_rcv_request IN VARCHAR2,
,'Y' --p_submit_order_import IN VARCHAR2
,Chr(0));
COMMIT;
RETURN;
ELSE
l_Complete := Get_Request_Status(g_Request_Tab(i));
IF l_Complete THEN
g_Request_Tab(i) := Fnd_Api.g_Miss_Num;
g_Request_Tab(i) := Fnd_Request.Submit_Request('RY'
,'RYOMRTOMTOPO'
,NULL
,NULL
,FALSE
,NULL --p_from_operate_unit IN NUMBER,
,NULL --p_so_header_id IN NUMBER,
,NULL --p_customer_po_number IN VARCHAR2,
,p_Ou_Name --p_current_ou_name IN VARCHAR2 DEFAULT NULL,
,'Y' --p_submit_rcv_request IN VARCHAR2,
,'Y' --p_submit_order_import IN VARCHAR2
,Chr(0));
Log_File('i: '
,i);
Log_File('request_id: '
,g_Request_Tab(i));
COMMIT;
RETURN;
END IF;
END IF;
Dbms_Lock.Sleep(10);
END LOOP;
END LOOP;

推荐阅读