Мы используем следующую процедуру для вызова сервлета, который создаст «отчет PDF», извлекая записи из таблицы.Поскольку размер этой таблицы огромен (около 40 ГБ), создание отчета в формате PDF занимает 15 минут.До этого времени мне нужно запустить цикл, чтобы проверить, был ли запрос сервлета успешно завершен.
Если он успешен, тогда нам нужно вызвать процедуру, которая отправит письмо с сгенерированным вложением PDF-файла.
Проблема: теперь перед получением / проверкой ответа эта процедура вызывает процедуру отправки почты.Так что почта идет без вложений.
Пожалуйста, дайте мне некоторую идею, чтобы решить эту проблему.
PROCEDURE batch_generate_report_prc
(
pi_date IN DATE,
po_filename OUT VARCHAR2
)
IS
p_paramval VARCHAR2(500);
p_filename VARCHAR2(500);
v_url VARCHAR2(2000);
p_key VARCHAR2(500);
p_spool VARCHAR2(500);
p_rep_seq NUMBER;
p_strfilename VARCHAR2(500);
v_run_report VARCHAR2 (2000);
vn_block NUMBER(5,2);
Po_status NUMBER;
vs_errmsg VARCHAR2(500);
BEGIN
BEGIN
Po_status := 1;
vn_block := 10;
SELECT lrepseq
INTO p_rep_seq
FROM com_reports_m
WHERE strrepname = 'NBR050';
vn_block := 11;
p_paramval := pi_date || '~' || 'SYSTEM';
-- p_paramval := p_paramval||'~'||c1_rec.strcompanycd;
v_url :=
com_rep_let_output_pkg.om_build_url_fnc (p_rep_seq,
p_paramval,
3,
'repletbatchprocess',
NULL,
p_strfilename
);
vn_block := 12;
SELECT strparamvalue
INTO p_key
FROM om_configuration
WHERE nparamkey = 78;
vn_block := 13;
SELECT strparamvalue
INTO p_spool
FROM om_configuration
WHERE nparamkey = 61;
vn_block := 14;
--DBMS_OUTPUT.put_line (v_url);
p_filename :=
'NBR050'
|| '_SYSTEM_'
|| TO_CHAR (pi_date, 'DD-MON-RRRR')
|| TO_CHAR (SYSTIMESTAMP, '_HH24MISSFF6')
|| '.pdf';
v_url :=
v_url
|| '&cmdkey='
|| p_key
|| '&P_FILE_FORMAT=1&DESFORMAT=PDF&DESTYPE=FILE&'
|| '&desname='
|| p_spool
|| p_filename;
--DBMS_OUTPUT.put_line (v_url); --Run the report
vn_block := 14;
UTL_HTTP.set_transfer_timeout (5000);
v_run_report := UTL_HTTP.request (v_url);
EXCEPTION
WHEN OTHERS
THEN
po_filename := NULL;
vs_errmsg := 'Error Occured while Generating Excep Rep NBR050 ' || SUBSTR (SQLERRM, 1, 110);
com_insert_exception_prc
(11,
992,
SYSDATE,
'MAIL',
NULL,
'9 Error occurred at block no='
|| vn_block
|| ' in Mail process while executing BPM Report NR050:'
|| ' '
|| SUBSTR (SQLERRM, 1, 110)
);
--dbms_output.put_line(SUBSTR (SQLERRM, 1, 110));
Po_status := 2;
END;
--Added by Muktad For Serch at FE.
IF Po_status = 1
THEN
INSERT INTO COM_CONTACT_HST (lcontactseq,lrepseq,dtcontact,nstatus,dtstatus,strfilename,leventseq,strcreatedby,DTCREATED)
VALUES
(COM_CONTACT_HST_SEQ.nextval,p_rep_seq,pi_date,Po_status,pi_date,p_filename,9,'BATCH',sysdate);
COMMIT;
END IF;
BEGIN --This sends mail but doubt ful to get the details how it sent.
BATCH_MAIL_SEND_REPORT_PRC(pi_date,p_filename,po_status);
END;
po_filename := p_filename;
EXCEPTION
WHEN OTHERS
THEN
po_filename := NULL;
com_insert_exception_prc
(
pi_nmoduleid => 10
,pi_nprocessid => 877
,pi_dtprocess => SYSDATE
,pi_strpolnbr => 'Mail'
,pi_npolcheckdigit => NULL
,pi_strerrordesc => '10 Unable to send mail in batch_mail_pkg.batch_generate_report_prc at block no :'||vn_block||' Oracle Error :'||Substr(Sqlerrm,1,100)
,pi_nmessagelevel => 0
);
END;