Edit D:\app\Administrator\product\11.2.0\dbhome_1\RDBMS\xml\orarep\plandiff\plandiffHtml.xsl
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- <xsl:include href="../xplan/xplHtml.xsl"/> --> <xsl:template match="/"> <html> <head> <title> SQL Plan Diff Report </title> <style type="text/css"> body, table, input, select, textarea {font:normal normal 8pt Verdana,Arial;text-decoration:none;color:#000000;} .s8 {font-size:8pt;color:#006699} .s9 {font-size:10pt;color:#006699} .s10 {font-size:14pt;color:#006699;} .s16 {border-width : 1px; border-color : #CCCC99; border-style: solid;color:#006699;font-size:8pt;} .s17 {border-width : 1px; border-color : #CCCC99; border-style: solid;font-size:8pt;} .s27 {border-width : 1px; border-color : #CCCC99; border-style: solid;} <!-- A { text-decoration:none } --> </style> </head> <body> <xsl:apply-templates select="report/head"/> <xsl:apply-templates select="report/body"/> </body> </html> </xsl:template> <xsl:template name="left-pad"> <xsl:param name="n"/> <xsl:if test="$n != 0"> <xsl:text>.</xsl:text> <xsl:call-template name="left-pad"> <xsl:with-param name="n" select="$n - 1"/> </xsl:call-template> </xsl:if> </xsl:template> <!-- +++++++++++++++++++++++++++ plan +++++++++++++++++++++++++++++++++++ --> <xsl:template match="plan"> <!-- metadata about the plan --> <table border="0"> <xsl:if test="./@id"> <tr> <th align="left">Plan Id</th> <td>: <xsl:value-of select="./@id"/></td> </tr> </xsl:if> <tr> <th align="left">Plan Hash Value </th> <xsl:choose> <xsl:when test="./@hash"> <td>: <xsl:value-of select="./@hash"/></td> </xsl:when> <xsl:otherwise> <td>: <xsl:value-of select="operation[@id=1]/other_xml/info[@type='plan_hash']"/> </td> </xsl:otherwise> </xsl:choose> </tr> </table> <br/> <!-- display plan lines --> <table bordercolor="#000000" ora_borderstyle="headeronly"> <tr> <th align="left" bgcolor="#CCCC99" class="s16">Id</th> <th align="left" bgcolor="#CCCC99" class="s16">Operation</th> <th align="left" bgcolor="#CCCC99" class="s16">Name</th> <!-- <th align="left" bgcolor="#CCCC99" class="s16">Rows</th> <th align="left" bgcolor="#CCCC99" class="s16">Bytes</th> <th align="left" bgcolor="#CCCC99" class="s16">Cost</th> <th align="left" bgcolor="#CCCC99" class="s16">Time</th> --> </tr> <xsl:for-each select="operation"> <xsl:apply-templates select="."/> </xsl:for-each> </table> <!-- predicates information section --> <xsl:if test="operation/predicates"> <br/>Predicate Information (identified by operation id): <hr size="1" width="290" align="left"/> <ul> <xsl:for-each select="operation/predicates"> <li> <xsl:value-of select="../@id"/> - <xsl:value-of select="@type"/>(<xsl:value-of select="."/>) </li> </xsl:for-each> </ul> </xsl:if> <!-- note information section --> <xsl:if test="(operation[@id=1]/other_xml/info/@type='dynamic_sampling') or (operation[@id=1]/other_xml/info/@type='sql_profile') or (operation[@id=1]/other_xml/info/@type='baseline') or (operation[@id=1]/other_xml/info/@type='sql_patch')"> <br/>Note <hr size="1" width="30" align="left"/> <!-- dynamic sampling --> <xsl:if test="(operation[@id=1]/other_xml/info/@type='dynamic_sampling')"> - dynamic sampling used for this statement </xsl:if> <!-- profile information --> <xsl:if test="(operation[@id=1]/other_xml/info/@type='sql_profile')"> - SQL profile <xsl:value-of select="operation[@id=1]/other_xml/info[@type='sql_profile']"/> used for this statement </xsl:if> <!-- plan baseline information --> <xsl:if test="(operation[@id=1]/other_xml/info/@type='baseline')"> - SQL plan baseline <xsl:value-of select="operation[@id=1]/other_xml/info[@type='baseline']"/> used for this statement </xsl:if> <!-- sql patch information --> <xsl:if test="(operation[@id=1]/other_xml/info/@type='sql_patch')"> - SQL patch <xsl:value-of select="operation[@id=1]/other_xml/info[@type='sql_patch']"/> used for this statement </xsl:if> <br/> </xsl:if> </xsl:template> <!-- +++++++++++++++++++++++++++ plan line +++++++++++++++++++++++++++++ --> <xsl:template match="operation"> <tr bgcolor="#F7F777" valign="bottom"> <td class="s27" align="right"> <!-- check predicates --> <xsl:if test="predicates"> * </xsl:if> <xsl:value-of select="./@id"/> </td> <td class="s27" ora_space_char="."> <!-- indent operation using depth if needed --> <xsl:if test="./@depth > 0"> <font color="#F7F777"> <xsl:call-template name="left-pad"> <xsl:with-param name="n" select="./@depth"/> </xsl:call-template> </font> </xsl:if> <!-- display operation name and options --> <xsl:value-of select="./@name"/> <xsl:text> </xsl:text> <xsl:value-of select="./@options"/> </td> <td class="s27"> <a> <xsl:attribute name="href"> #<xsl:value-of select="substring-after(./object_alias, '@')"/> </xsl:attribute> <xsl:value-of select="object"/> </a> </td> <!-- <td class="s27" align="right"> <xsl:value-of select="card"/> </td> <td class="s27" align="right"> <xsl:value-of select="bytes"/> </td> <td class="s27" align="right"> <xsl:value-of select="cost"/> </td> <td class="s27" align="right"> <xsl:value-of select="time"/> </td> --> </tr> </xsl:template> <!-- +++++++++++++++++++++++++++ report header ++++++++++++++++++++++++++ --> <xsl:template match="head"> <a name="general"/> <a href="#general" style="text-decoration:none"> <font class="s10"> General Information </font> </a> <hr size="3" width="650" align="left"/> <br/> <xsl:apply-templates select="task"/> </xsl:template> <!-- ++++++++++++++++++++++++++ task information ++++++++++++++++++++++++++ --> <xsl:template match="task"> <table class="ex" cellspacing="0" border="0"> <tr> <td> <font class="s9"><b>Task Information:</b></font> <hr size="1" width="312" align="left"/> </td> <td> <font class="s9"><b>Workload Information:</b></font> <hr size="1" width="315" align="left"/> </td> </tr> <tr align="left" valign="top"> <td> <table class="ex" cellspacing="0" border="0"> <tr><th align="left">Task Name</th> <td>: <xsl:value-of select="property[@name='name']"/></td></tr> <tr><th align="left">Task Owner</th> <td>: <xsl:value-of select="property[@name='owner']"/></td></tr> <tr><th align="left">Description</th> <td>: <xsl:value-of select="property[@name='desc']"/></td></tr> </table> </td> <td> <xsl:apply-templates select="../sqlset"/> </td> </tr> </table> <!-- display current execution information --> <!-- <br/> <font class="s9"><b>Execution Information:</b></font> <hr size="1" width="650" align="left"/> <table class="ex" cellspacing="0" border="0"> <tr> <td> <table class="ex" cellspacing="0" border="0"> <tr> <th align="left">Execution Name</th> <td>: <xsl:value-of select= "execution[@label='current']/property[@name='name']"/> </td> </tr> <tr> <th align="left">Execution Type</th> <td>: <xsl:value-of select= "execution[@label='current']/property[@name='type']"/> </td></tr> <tr> <th align="left">Description</th> <td>: <xsl:value-of select= "execution[@label='current']/property[@name='desc']"/> </td> </tr> <tr> <th align="left">Scope</th> <td>: <xsl:value-of select= "execution[@label='current']/property[@name='mode']"/> </td> </tr> <tr> <th align="left">Status</th> <td>: <xsl:value-of select= "execution[@label='current']/property[@name='status']"/> </td> </tr> </table> </td> <td> <table class="ex" cellspacing="0" border="0"> <tr> <th align="left">Started </th> <td>: <xsl:value-of select= "execution[@label='current']/property[@name='start']"/> </td> </tr> <tr><th align="left">Last Updated </th> <td>: <xsl:value-of select= "execution[@label='current']/property[@name='modif']"/> </td> </tr> <tr> <th align="left">Global Time Limit</th> <td>: <xsl:value-of select= "execution[@label='current']/property[@name='time_limit']"/> </td> </tr> <tr> <th align="left">Per-SQL Time Limit</th> <td>: <xsl:value-of select= "execution[@label='current']/property[@name='local_time_limit']"/> </td> </tr> <tr> <th align="left">Number of Errors</th> <td>: <xsl:value-of select= "execution[@label='current']/property[@name='err_count']"/> </td> </tr> </table> </td> </tr> </table> --> </xsl:template> <!-- +++++++++++++++++++++++++ template execution +++++++++++++++++++++++++ --> <xsl:template match="execution"> <!-- common execution information --> <table class="ex" cellspacing="0" border="0"> <tr><th align="left">Execution Name</th> <td>: <xsl:value-of select="./property[@name='name']"/></td></tr> <tr><th align="left">Execution Type</th> <td>: <xsl:value-of select="./property[@name='type']"/> <xsl:if test="(./property[@name='dblink'])"> REMOTE </xsl:if> </td> </tr> <xsl:if test="(./property[@name='dblink'])"> <tr><th align="left">Database Link</th> <td>: <xsl:value-of select="./property[@name='dblink']"/></td></tr> </xsl:if> <xsl:if test="(./property[@name='desc'])"> <tr><th align="left">Description</th> <td>: <xsl:value-of select="./property[@name='desc']"/></td></tr> </xsl:if> <tr><th align="left">Scope</th> <td>: <xsl:value-of select="./property[@name='mode']"/></td></tr> <tr><th align="left">Status</th> <td>: <xsl:value-of select="./property[@name='status']"/></td></tr> <tr><th align="left">Started </th> <td>: <xsl:value-of select="./property[@name='start']"/></td></tr> <tr><th align="left">Last Updated </th> <td>: <xsl:value-of select="./property[@name='modif']"/></td></tr> <tr><th align="left">Global Time Limit</th> <td>: <xsl:value-of select="./property[@name='time_limit']"/></td></tr> <tr><th align="left">Per-SQL Time Limit</th> <td>: <xsl:value-of select="./property[@name='local_time_limit']"/></td> </tr> <tr><th align="left">Number of Errors</th> <td>: <xsl:value-of select="./property[@name='err_count']"/></td> </tr> </table> </xsl:template> <!-- ++++++++++++++++++++++++++ sts information ++++++++++++++++++++++++++ --> <xsl:template match="sqlset"> <table class="ex" cellspacing="0" border="0"> <tr><th align="left">SQL Tuning Set Name</th> <td>: <xsl:value-of select="property[@name='name']"/></td></tr> <tr><th align="left">SQL Tuning Set Owner</th> <td>: <xsl:value-of select="property[@name='owner']"/></td></tr> <tr><th align="left">Total SQL Statement Count</th> <td>: <xsl:value-of select="property[@name='sql_count']"/></td></tr> </table> </xsl:template> <!-- ++++++++++++++++++++++++++ report body ++++++++++++++++++++++++++ --> <xsl:template match="body"> <a name="details"/> <a href="#details" style="text-decoration:none"> <font class="s10"><br/> Report Details: </font> <font class="s9"> <b> SQL Plan Comparison </b> </font> </a> <!-- <xsl:apply-templates select="objects_qbreg" mode="summary"/> --> <xsl:apply-templates select="objects_qbreg_sum"/> <xsl:apply-templates select="objects_jo"/> <xsl:apply-templates select="objects_jm"/> <xsl:apply-templates select=".//plan"/> <xsl:apply-templates select="objects" mode="compiler repository"/> <!-- <xsl:apply-templates select="objects" mode="fix control"/> --> <xsl:apply-templates select="objects_qbreg" mode="details"/> </xsl:template> <!-- ++++++++++++++++++++++++++++ SQL errors +++++++++++++++++++++++++++++ --> <xsl:template match="error"> <br/> <font class="s8"><b> Errors: </b></font> <hr size="1" width="100" align="left"/> <table border="0" ora_widthc="80"> <tr> <td> <ol> <li><xsl:value-of select="."/></li> </ol> </td> </tr> </table> </xsl:template> <!-- ++++++++++++++++++++++++++++ QB Diff Summary ++++++++++++++++++++++++ --> <xsl:template match="objects_qbreg_sum"> <h4>Query Block Diff</h4> <table border="1" ora_borderstyle="headeronly"> <tr> <th bgcolor="#CCCC99" class="s16">Query Block</th> <th bgcolor="#CCCC99" class="s16">SQL Plan 1</th> <th bgcolor="#CCCC99" class="s16">SQL Plan 2</th> <th bgcolor="#CCCC99" class="s16">Diff</th> </tr> <xsl:for-each select="item"> <xsl:if test="./@type='qbreg'"> <tr> <td class="s17" align="left"> <xsl:attribute name="bgcolor"> <xsl:choose> <xsl:when test=". = '*' and (./@difflvl > 1)">red </xsl:when> <xsl:otherwise>white</xsl:otherwise> </xsl:choose> </xsl:attribute> <!-- indent operation using depth if needed --> <xsl:if test="./@difflvl > 0"> <font color="#F7F777"> <xsl:call-template name="left-pad"> <xsl:with-param name="n" select="./@difflvl"/> </xsl:call-template> </font> </xsl:if> <xsl:choose> <xsl:when test=". = '*' and (./@difflvl > 1)"> <font color="white"> <xsl:value-of select="./@qbc"/> </font> </xsl:when> <xsl:otherwise> <font color="black"> <xsl:value-of select="./@qbc"/> </font> </xsl:otherwise> </xsl:choose> </td> <td class="s17" align="left"> <xsl:attribute name="bgcolor"> <xsl:choose> <xsl:when test=". = '*' and (./@difflvl > 1)">red </xsl:when> <xsl:otherwise>white</xsl:otherwise> </xsl:choose> </xsl:attribute> <xsl:choose> <xsl:when test=". = '*' and (./@difflvl > 1)"> <font color="white"> <xsl:value-of select="./@final1"/> </font> </xsl:when> <xsl:otherwise> <font color="black"> <xsl:value-of select="./@final1"/> </font> </xsl:otherwise> </xsl:choose> </td> <td class="s17" align="left"> <xsl:attribute name="bgcolor"> <xsl:choose> <xsl:when test=". = '*' and (./@difflvl > 1)">red </xsl:when> <xsl:otherwise>white</xsl:otherwise> </xsl:choose> </xsl:attribute> <xsl:choose> <xsl:when test=". = '*' and (./@difflvl > 1)"> <font color="white"> <xsl:value-of select="./@final2"/> </font> </xsl:when> <xsl:otherwise> <font color="black"> <xsl:value-of select="./@final2"/> </font> </xsl:otherwise> </xsl:choose> </td> <td class="s17" align="left"> <xsl:attribute name="bgcolor"> <xsl:choose> <xsl:when test=". = '*' and (./@difflvl > 1)">red </xsl:when> <xsl:otherwise>white</xsl:otherwise> </xsl:choose> </xsl:attribute> <!-- indent operation using depth if needed --> <xsl:if test="./@difflvl > 0"> <font color="#F7F777"> <xsl:call-template name="left-pad"> <xsl:with-param name="n" select="./@difflvl"/> </xsl:call-template> </font> </xsl:if> <a> <xsl:attribute name="href"> #<xsl:value-of select="./@qbc"/> </xsl:attribute> <xsl:choose> <xsl:when test=". = '*' and (./@difflvl > 1)"> <font color="white"> <xsl:value-of select="./@transformation"/> </font> </xsl:when> <xsl:otherwise> <font color="black"> <xsl:value-of select="./@transformation"/> </font> </xsl:otherwise> </xsl:choose> </a> </td> </tr> </xsl:if> </xsl:for-each> </table> <br/> </xsl:template> <!-- ++++++++++++++++++++++++++++ SQL CR +++++++++++++++++++++++++++++++++ --> <xsl:template match="objects" mode="compiler repository"> <table border="1" ora_borderstyle="headeronly"> <tr> <th bgcolor="#CCCC99" class="s16">Item</th> <th bgcolor="#CCCC99" class="s16">Type</th> <th bgcolor="#CCCC99" class="s16">SQL Plan #1 </th> <th bgcolor="#CCCC99" class="s16">SQL Plan #2 </th> </tr> <xsl:for-each select="item"> <!-- Hide construct for now <xsl:if test="./@type = 'construct' and ./@difflvl != 'no_diff'"> <tr> <td bgcolor="#CCCC99" class="s17" align="left"> <xsl:value-of select="."/> </td> <td bgcolor="#CCCC99" class="s17" align="left"> <xsl:value-of select="./@type"/> </td> <td class="s17" align="left"> <xsl:attribute name="bgcolor"> <xsl:choose> <xsl:when test="./@status1=./@status2">white</xsl:when> <xsl:otherwise>yellow</xsl:otherwise> </xsl:choose> </xsl:attribute> <xsl:attribute name="color"> <xsl:choose> <xsl:when test="./@status1=./@status2">black</xsl:when> <xsl:otherwise>white</xsl:otherwise> </xsl:choose> </xsl:attribute> <xsl:value-of select="./@status1"/> </td> <td class="s17" align="left"> <xsl:attribute name="bgcolor"> <xsl:choose> <xsl:when test="./@status1=./@status2">white</xsl:when> <xsl:otherwise>yellow</xsl:otherwise> </xsl:choose> </xsl:attribute> <xsl:attribute name="color"> <xsl:choose> <xsl:when test="./@status1=./@status2">black</xsl:when> <xsl:otherwise>white</xsl:otherwise> </xsl:choose> </xsl:attribute> <xsl:value-of select="./@status2"/> </td> </tr> </xsl:if> --> <xsl:if test="./@type = 'Feature' and ./@difflvl != 'no_diff'"> <tr> <td class="s17" align="left"><xsl:value-of select="."/></td> <td class="s17" align="left"> <xsl:value-of select="./@p_feature"/> </td> <td class="s17" align="left"> <xsl:attribute name="bgcolor"> <xsl:choose> <xsl:when test="./@status1=./@status2">white</xsl:when> <xsl:otherwise>yellow</xsl:otherwise> </xsl:choose> </xsl:attribute> <xsl:attribute name="color"> <xsl:choose> <xsl:when test="./@status1=./@status2">black</xsl:when> <xsl:otherwise>white</xsl:otherwise> </xsl:choose> </xsl:attribute> <xsl:value-of select="./@status1"/> </td> <td class="s17" align="left"> <xsl:attribute name="bgcolor"> <xsl:choose> <xsl:when test="./@status1=./@status2">white</xsl:when> <xsl:otherwise>yellow</xsl:otherwise> </xsl:choose> </xsl:attribute> <xsl:attribute name="color"> <xsl:choose> <xsl:when test="./@status1=./@status2">black</xsl:when> <xsl:otherwise>white</xsl:otherwise> </xsl:choose> </xsl:attribute> <xsl:value-of select="./@status2"/> </td> </tr> </xsl:if> <xsl:if test="./@type = 'Outline' and ./@difflvl != 'no_diff'"> <tr> <td class="s17" align="left"><xsl:value-of select="."/></td> <td class="s17" align="left"> <xsl:value-of select="./@type"/> </td> <td class="s17" align="left"> <xsl:attribute name="bgcolor"> <xsl:choose> <xsl:when test="./@status1=./@status2">white</xsl:when> <xsl:otherwise>yellow</xsl:otherwise> </xsl:choose> </xsl:attribute> <xsl:attribute name="color"> <xsl:choose> <xsl:when test="./@status1=./@status2">black</xsl:when> <xsl:otherwise>white</xsl:otherwise> </xsl:choose> </xsl:attribute> <xsl:value-of select="./@status1"/> </td> <td class="s17" align="left"> <xsl:attribute name="bgcolor"> <xsl:choose> <xsl:when test="./@status1=./@status2">white</xsl:when> <xsl:otherwise>yellow</xsl:otherwise> </xsl:choose> </xsl:attribute> <xsl:attribute name="color"> <xsl:choose> <xsl:when test="./@status1=./@status2">black</xsl:when> <xsl:otherwise>white</xsl:otherwise> </xsl:choose> </xsl:attribute> <xsl:value-of select="./@status2"/> </td> </tr> </xsl:if> </xsl:for-each> </table> <br/> </xsl:template> <!-- ++++++++++++++++++++++++++++ Fix Control ++++++++++++++++++++++++++++ --> <xsl:template match="objects" mode="fix control"> <table border="1" ora_borderstyle="headeronly"> <tr> <th bgcolor="#CCCC99" class="s16">Bug#</th> <th bgcolor="#CCCC99" class="s16">Fix Description</th> <th bgcolor="#CCCC99" class="s16">SQL Plan #1 </th> <th bgcolor="#CCCC99" class="s16">SQL Plan #2 </th> </tr> <xsl:for-each select="item"> <xsl:if test="./@type = 'Fix' and ./@difflvl != 'no_diff'"> <tr> <td class="s17" align="left"><xsl:value-of select="."/></td> <td class="s17" align="left"> <xsl:value-of select="./@p_feature"/> </td> <td class="s17" align="left"> <xsl:attribute name="bgcolor"> <xsl:choose> <xsl:when test="./@status1=./@status2">white</xsl:when> <xsl:otherwise>yellow</xsl:otherwise> </xsl:choose> </xsl:attribute> <xsl:attribute name="color"> <xsl:choose> <xsl:when test="./@status1=./@status2">black</xsl:when> <xsl:otherwise>white</xsl:otherwise> </xsl:choose> </xsl:attribute> <xsl:value-of select="./@status1"/> </td> <td class="s17" align="left"> <xsl:attribute name="bgcolor"> <xsl:choose> <xsl:when test="./@status1=./@status2">white</xsl:when> <xsl:otherwise>yellow</xsl:otherwise> </xsl:choose> </xsl:attribute> <xsl:attribute name="color"> <xsl:choose> <xsl:when test="./@status1=./@status2">black</xsl:when> <xsl:otherwise>white</xsl:otherwise> </xsl:choose> </xsl:attribute> <xsl:value-of select="./@status2"/> </td> </tr> </xsl:if> </xsl:for-each> </table> <br/> </xsl:template> <!-- ++++++++++++++++++++++++++++ Join order ++++++++++++++++++++++++++++ --> <xsl:template match="objects_jo"> <h4>Join Order Diff</h4> <table border="1" ora_borderstyle="headeronly"> <tr> <th bgcolor="#CCCC99" class="s16">Query Block</th> <th bgcolor="#CCCC99" class="s16">SQL Plan 1 </th> <th bgcolor="#CCCC99" class="s16">SQL Plan 2 </th> </tr> <xsl:for-each select="item"> <xsl:if test="./@type = 'join_order' and . = '*'"> <tr> <td class="s17" align="left"> <xsl:attribute name="bgcolor"> <xsl:choose> <xsl:when test=". = '*'">red</xsl:when> <xsl:otherwise>white</xsl:otherwise> </xsl:choose> </xsl:attribute> <a> <xsl:attribute name="href"> #<xsl:value-of select="./@qbc"/> </xsl:attribute> <xsl:choose> <xsl:when test=". = '*'"> <font color="white"> <xsl:value-of select="./@qbc"/> </font> </xsl:when> <xsl:otherwise> <font color="black"> <xsl:value-of select="./@qbc"/> </font> </xsl:otherwise> </xsl:choose> </a> </td> <td class="s17" align="left"> <xsl:attribute name="bgcolor"> <xsl:choose> <xsl:when test=". = '*'">red</xsl:when> <xsl:otherwise>white</xsl:otherwise> </xsl:choose> </xsl:attribute> <xsl:choose> <xsl:when test=". = '*'"> <font color="white"> <xsl:value-of select="./@jo1"/> </font> </xsl:when> <xsl:otherwise> <font color="black"> <xsl:value-of select="./@jo1"/> </font> </xsl:otherwise> </xsl:choose> </td> <td class="s17" align="left"> <xsl:attribute name="bgcolor"> <xsl:choose> <xsl:when test=". = '*'">red</xsl:when> <xsl:otherwise>white</xsl:otherwise> </xsl:choose> </xsl:attribute> <xsl:choose> <xsl:when test=". = '*'"> <font color="white"> <xsl:value-of select="./@jo2"/> </font> </xsl:when> <xsl:otherwise> <font color="black"> <xsl:value-of select="./@jo2"/> </font> </xsl:otherwise> </xsl:choose> </td> </tr> </xsl:if> </xsl:for-each> </table> <br/> </xsl:template> <!-- ++++++++++++++++++++++++++++ Join Method ++++++++++++++++++++++++++++ --> <xsl:template match="objects_jm"> <h4>Join Method Diff</h4> <table border="1" ora_borderstyle="headeronly"> <tr> <th bgcolor="#CCCC99" class="s16">Query Block</th> <th bgcolor="#CCCC99" class="s16">Table to Join</th> <th bgcolor="#CCCC99" class="s16">SQL Plan 1</th> <th bgcolor="#CCCC99" class="s16">SQL Plan 2</th> </tr> <xsl:for-each select="item"> <xsl:if test="./@type = 'join_method'"> <tr> <td class="s17" align="left"> <xsl:attribute name="bgcolor"> <xsl:choose> <xsl:when test=". = '*'">red</xsl:when> <xsl:otherwise>white</xsl:otherwise> </xsl:choose> </xsl:attribute> <a> <xsl:attribute name="href"> #<xsl:value-of select="./@qbc"/> </xsl:attribute> <xsl:choose> <xsl:when test=". = '*'"> <font color="white"> <xsl:value-of select="./@qbc"/> </font> </xsl:when> <xsl:otherwise> <font color="black"> <xsl:value-of select="./@qbc"/> </font> </xsl:otherwise> </xsl:choose> </a> </td> <td class="s17" align="left"> <xsl:attribute name="bgcolor"> <xsl:choose> <xsl:when test=". = '*'">red</xsl:when> <xsl:otherwise>white</xsl:otherwise> </xsl:choose> </xsl:attribute> <xsl:choose> <xsl:when test=". = '*'"> <font color="white"> <xsl:value-of select="./@arg1"/> </font> </xsl:when> <xsl:otherwise> <font color="black"> <xsl:value-of select="./@arg1"/> </font> </xsl:otherwise> </xsl:choose> </td> <td class="s17" align="left"> <xsl:attribute name="bgcolor"> <xsl:choose> <xsl:when test=". = '*'">red</xsl:when> <xsl:otherwise>white</xsl:otherwise> </xsl:choose> </xsl:attribute> <xsl:choose> <xsl:when test=". = '*'"> <font color="white"> <xsl:value-of select="./@jm1"/> </font> </xsl:when> <xsl:otherwise> <font color="black"> <xsl:value-of select="./@jm1"/> </font> </xsl:otherwise> </xsl:choose> </td> <td class="s17" align="left"> <xsl:attribute name="bgcolor"> <xsl:choose> <xsl:when test=". = '*'">red</xsl:when> <xsl:otherwise>white</xsl:otherwise> </xsl:choose> </xsl:attribute> <xsl:choose> <xsl:when test=". = '*'"> <font color="white"> <xsl:value-of select="./@jm2"/> </font> </xsl:when> <xsl:otherwise> <font color="black"> <xsl:value-of select="./@jm2"/> </font> </xsl:otherwise> </xsl:choose> </td> </tr> </xsl:if> </xsl:for-each> </table> <br/> </xsl:template> <!-- ++++++++++++++++++++++++++++ QB Diff details ++++++++++++++++++++++++ --> <xsl:template match="objects_qbreg" mode="details"> <table border="1" ora_borderstyle="headeronly"> <tr> <th bgcolor="#CCCC99" class="s16">Diff</th> <th bgcolor="#CCCC99" class="s16">Transformation</th> <th bgcolor="#CCCC99" class="s16">SQL Plan 1</th> <th bgcolor="#CCCC99" class="s16">SQL Plan 2</th> <th bgcolor="#CCCC99" class="s16">Query block</th> </tr> <xsl:for-each select="item"> <xsl:if test="./@type='qbreg'"> <tr> <td class="s17" align="left"> <xsl:attribute name="bgcolor"> <xsl:choose> <xsl:when test=". = '*' and (./@difflvl > 1 or ./@final1 = ./@final2)">red </xsl:when> <xsl:otherwise>white</xsl:otherwise> </xsl:choose> </xsl:attribute> <xsl:choose> <xsl:when test=". = '*' and (./@difflvl > 1 or ./@final1 = ./@final2)"> <font color="white"> <xsl:value-of select="."/> </font> </xsl:when> <xsl:otherwise> <font color="black"> <xsl:value-of select="."/> </font> </xsl:otherwise> </xsl:choose> </td> <td class="s17" align="left"> <xsl:attribute name="bgcolor"> <xsl:choose> <xsl:when test=". = '*' and (./@difflvl > 1 or ./@final1 = ./@final2)">red </xsl:when> <xsl:otherwise>white</xsl:otherwise> </xsl:choose> </xsl:attribute> <!-- indent operation using depth if needed --> <xsl:if test="./@difflvl > 0"> <font color="#F7F777"> <xsl:call-template name="left-pad"> <xsl:with-param name="n" select="./@difflvl"/> </xsl:call-template> </font> </xsl:if> <a> <xsl:attribute name="name"> <xsl:choose> <xsl:when test="./@qbc1 = 'NA'"> <xsl:value-of select="./@qbc2"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="./@qbc1"/> </xsl:otherwise> </xsl:choose> </xsl:attribute> <xsl:choose> <xsl:when test=". = '*' and (./@difflvl > 1 or ./@final1 = ./@final2)"> <font color="white"> <xsl:choose> <xsl:when test="./@transform1 = 'NA'"> <xsl:value-of select="./@transform2"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="./@transform1"/> </xsl:otherwise> </xsl:choose> </font> </xsl:when> <xsl:otherwise> <font color="black"> <xsl:choose> <xsl:when test="./@transform1 = 'NA'"> <xsl:value-of select="./@transform2"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="./@transform1"/> </xsl:otherwise> </xsl:choose> </font> </xsl:otherwise> </xsl:choose> </a> </td> <td class="s17" align="left"> <xsl:attribute name="bgcolor"> <xsl:choose> <xsl:when test=". = '*' and (./@difflvl > 1 or ./@final1 = ./@final2)">red </xsl:when> <xsl:otherwise>white</xsl:otherwise> </xsl:choose> </xsl:attribute> <xsl:choose> <xsl:when test=". = '*' and (./@difflvl > 1 or ./@final1 = ./@final2)"> <font color="white"> <xsl:value-of select="./@final1"/> </font> </xsl:when> <xsl:otherwise> <font color="black"> <xsl:value-of select="./@final1"/> </font> </xsl:otherwise> </xsl:choose> </td> <td class="s17" align="left"> <xsl:attribute name="bgcolor"> <xsl:choose> <xsl:when test=". = '*' and (./@difflvl > 1 or ./@final1 = ./@final2)">red </xsl:when> <xsl:otherwise>white</xsl:otherwise> </xsl:choose> </xsl:attribute> <xsl:choose> <xsl:when test=". = '*' and (./@difflvl > 1 or ./@final1 = ./@final2)"> <font color="white"> <xsl:value-of select="./@final2"/> </font> </xsl:when> <xsl:otherwise> <font color="black"> <xsl:value-of select="./@final2"/> </font> </xsl:otherwise> </xsl:choose> </td> <td class="s17" align="left"> <xsl:attribute name="bgcolor"> <xsl:choose> <xsl:when test=". = '*' and (./@difflvl > 1 or ./@final1 = ./@final2)">red </xsl:when> <xsl:otherwise>white</xsl:otherwise> </xsl:choose> </xsl:attribute> <!-- indent operation using depth if needed --> <xsl:if test="./@difflvl > 0"> <font color="#F7F777"> <xsl:call-template name="left-pad"> <xsl:with-param name="n" select="./@difflvl"/> </xsl:call-template> </font> </xsl:if> <xsl:choose> <xsl:when test=". = '*' and (./@difflvl > 1 or ./@final1 = ./@final2)"> <font color="white"> <xsl:choose> <xsl:when test="./@qbc1 = 'NA'"> <xsl:value-of select="./@qbc2"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="./@qbc1"/> </xsl:otherwise> </xsl:choose> </font> </xsl:when> <xsl:otherwise> <font color="black"> <xsl:choose> <xsl:when test="./@qbc1 = 'NA'"> <xsl:value-of select="./@qbc2"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="./@qbc1"/> </xsl:otherwise> </xsl:choose> </font> </xsl:otherwise> </xsl:choose> </td> </tr> </xsl:if> </xsl:for-each> </table> <br/> </xsl:template> </xsl:stylesheet>
Ms-Dos/Windows
Unix
Write backup
jsp File Browser version 1.2 by
www.vonloesch.de