示例
CREATE OR REPLACE PACKAGE BODY cux_sub_request_pkg IS
--main request
PROCEDURE main(errbuf OUT VARCHAR2, retcode OUT NUMBER) IS
l_subreq_tb fnd_concurrent.requests_tab_type;
l_request_data VARCHAR2(100);
l_error_count NUMBER := 0;
l_warn_count NUMBER := 0;
l_request_id NUMBER;
BEGIN
--
-- Check for re-start status
-- you can set the request normal and return, or set the request error/warn if there is
-- one or mor sub-request error/warn.
--
l_request_data := fnd_conc_global.request_data;
IF l_request_data IS NOT NULL THEN
--set normal and return
--retcode := 0;
--RETURN;
--set status with child's status
l_subreq_tb := fnd_concurrent.get_sub_requests(fnd_global.conc_request_id);
FOR i IN 1 .. l_subreq_tb.count LOOP
IF l_subreq_tb(i).dev_status = 'WARNING' THEN
l_warn_count := l_warn_count + 1;
ELSIF l_subreq_tb(i).dev_status <> 'NORMAL' THEN
l_error_count := l_error_count + 1;
END IF;
END LOOP;
IF l_error_count > 0 THEN
retcode := 2;
RETURN;
END IF;
IF l_warn_count > 0 THEN
retcode := 1;
RETURN;
END IF;
retcode := 0;
RETURN;
END IF;
--
--
--
--you other code here
--
--submit sub-request
l_request_id := fnd_request.submit_request(application => 'CUX',
program => 'CUX_HQC_SUBREQUEST',
description => NULL,
start_time => NULL,
sub_request => TRUE);
IF l_request_id > 0 THEN
--pause the main request
fnd_conc_global.set_req_globals(conc_status => 'PAUSED',
request_data => l_request_id);
ELSE
errbuf := 'submit sub-request error!';
retcode := 2;
END IF;
EXCEPTION
WHEN OTHERS THEN
errbuf := SQLERRM;
retcode := 2;
END main;
--sub request
PROCEDURE sub_request(errbuf OUT VARCHAR2, retcode OUT NUMBER) IS
BEGIN
NULL;
EXCEPTION
WHEN OTHERS THEN
errbuf := SQLERRM;
retcode := 2;
END sub_request;
END cux_sub_request_pkg;