J'essaie de générer un rapport sur les requêtes avec le plus de lectures de disque. Le rapport généré sera envoyé par e-mail. J'ai écrit du code comme ci-dessous. Lorsque j'inclus la requête du top 15, cela fonctionne bien mais si j'augmente le nombre de hte, j'obtiens 'erreur numérique ou valeur'. Je suppose que cela arrive parce que je dépasse certains types de données limite mais je ne pouvais pas l'identifier. Quelqu'un voit le problème? Et comment puis-je envoyer un rapport énorme sans une erreur comme celle-ci?ORACLE Erreur numérique ou de valeur
J'ai une fonction F_GENERATE_REPORT et une procédure P_SEND_REPORT_AS_EMAIL. procédure de P_SEND_REPORT_AS_EMAIL utilise F_GENERATE_REPORT que le corps de l'email comme UTL_MAIL.SEND (message => F_GENERATE_REPORT (5)) où 5 utilisé pour la page 5.
erreur a lieu sur la ligne UTL_MAIL.SEND() dans la procédure P_SEND_REPORT_AS_EMAIL
Merci à tous.
clgenerated_html_markup est une CLOB.
FOR cur_for_query IN (SELECT *
FROM (SELECT buffer_gets,rows_processed,executions,
fetches,hash_value,sql_text, disk_reads,
rank() over(ORDER BY disk_reads DESC) AS rank FROM v$sqlarea)
WHERE rank <= nquery_count)
LOOP
--dbms_output.put_line(counter);
--counter := counter + 1;
clgenerated_html_markup := clgenerated_html_markup || HTF.TABLEROWOPEN || CHR(10) ;
clgenerated_html_markup := clgenerated_html_markup || HTF.TABLEDATA(cur_for_query.rank,null,null,null,null,null,'class=tdData') || CHR(10) ;
clgenerated_html_markup := clgenerated_html_markup || HTF.TABLEDATA(cur_for_query.sql_text,null,null,null,null,null,'class=tdSQLText') || CHR(10) ;
clgenerated_html_markup := clgenerated_html_markup || HTF.TABLEDATA(TO_CHAR(NVL(cur_for_query.disk_reads,'')),'CENTER',null,null,null,null,'class=tdData') || CHR(10) ;
clgenerated_html_markup := clgenerated_html_markup || HTF.TABLEDATA(TO_CHAR(NVL(cur_for_query.buffer_gets,'')),'CENTER',null,null,null,null,'class=tdData') || CHR(10) ;
clgenerated_html_markup := clgenerated_html_markup || HTF.TABLEDATA(TO_CHAR(NVL(cur_for_query.executions,'')),'CENTER',null,null,null,null,'class=tdData') || CHR(10) ;
clgenerated_html_markup := clgenerated_html_markup || HTF.TABLEDATA(TO_CHAR(NVL(cur_for_query.fetches,'')),'CENTER',null,null,null,null,'class=tdData') || CHR(10) ;
--clgenerated_html_markup := clgenerated_html_markup || HTF.TABLEDATA('','CENTER',null,null,null,null,'class=tdData') || CHR(10) ;
--clgenerated_html_markup := clgenerated_html_markup || HTF.TABLEDATA('','CENTER',null,null,null,null,'class=tdData') || CHR(10) ;
clgenerated_html_markup := clgenerated_html_markup || HTF.TABLEROWCLOSE || CHR(10) ;
END LOOP;
Envoyer un email Procédure
PROCEDURE P_SEND_REPORT_AS_EMAIL
(
vreceipent VARCHAR2,
vsubject VARCHAR2,
nquery_count NUMBER DEFAULT 5
)
IS
BEGIN
-- INPUT VALIDATION
IF vreceipent IS NULL THEN
RAISE_APPLICATION_ERROR(value_can_not_be_null,'DBA_EXHAUSTIVE_QUERY_PKG::P_SEND_REPORT_AS_EMAIL::Receipent Email Address Can Not Be Null.');
END IF;
-- END OF INPUT VALIDATION
UTL_MAIL.SEND(sender => '[email protected]',
recipients => vreceipent,
subject => NVL(vsubject,''),
message => F_GENERATE_REPORT(nquery_count),
mime_type => 'text/html; charset=us-ascii');
EXCEPTION
WHEN OTHERS THEN
-- TODO LOG ERROR HERE
RAISE;
END P_SEND_REPORT_AS_EMAIL;
+1 APEX_Email est joli. Cela nous aurait fait gagner beaucoup de temps si nous étions disponibles lorsque nous avons roulé notre wrapper utl_smpt. –