-- David Mann
-- http://ba6.us
-- dmann99@gmail.com
--
-- Long Operations Graph with HTML Output
-- 01/29/2009

DECLARE
  NumOperations NUMBER :=0;
BEGIN
  
  DBMS_OUTPUT.PUT_LINE('<FONT SIZE=3 FACE="Courier">');

  FOR c1 IN (SELECT MESSAGE, ROUND(sofar/totalwork*100,0) as pct
               FROM v$session_longops
         WHERE sofar <> totalwork
      ORDER BY target, sid) 
  LOOP
        
    DBMS_OUTPUT.PUT_LINE('<TABLE BORDER="1" BGCOLOR="#EEEEEE" WIDTH="100%">');
    DBMS_OUTPUT.PUT_LINE('<TR>');
    DBMS_OUTPUT.PUT_LINE('<TD>Operation:</TD>');
    DBMS_OUTPUT.PUT_LINE('<TD>'||c1.MESSAGE || '</TD>');
    DBMS_OUTPUT.PUT_LINE('</TR>');
    DBMS_OUTPUT.PUT_LINE('<TR>');
    DBMS_OUTPUT.PUT_LINE('<TD>Progress:</TD>');
    
    DBMS_OUTPUT.PUT_LINE('  <TABLE BORDER="1" BGCOLOR="RED" WIDTH="'||c1.pct||'%">');
    DBMS_OUTPUT.PUT_LINE('  <TR><TD>'||c1.pct||'%</TD></TR>');
    DBMS_OUTPUT.PUT_LINE('  </TABLE>');

    DBMS_OUTPUT.PUT_LINE('</TD></TR></TABLE>');

    DBMS_OUTPUT.PUT_LINE('<BR>');
    NumOperations := NumOperations + 1;
  END LOOP;

  IF NumOperations = 0 THEN
    DBMS_OUTPUT.PUT_LINE('No Long Operations Active');
  END IF;

  DBMS_OUTPUT.PUT_LINE('</FONT>');


END;