<?xml version="1.0"?>
<!--

 Copyright (c) 2006, 2009, Oracle and/or its affiliates. All rights reserved. 

NAME
    kuatprop.xsl
DESCRIPTION
    Convert table property diffs in sxml TABLE diff document
     to ALTER_XML document

MODIFIED        MM/DD/YY
    abodge      04/20/09 - Fix lrg 3860916
    abodge      01/14/09 - Copy 10.2.0.5GC on top of 11.2 DB Control
    lbarton     09/15/08 - move LRG param declaration after imports
    lbarton     07/10/08 - bug 5709159: SQL_LIST_ITEM subelements
    htseng      07/18/08 - add sleep between to alter flashback archive
                           statement (lrg 3403596)
    rapayne     02/27/08 - Fix NOT_ALTERABLE catches for storage/initial and
                                        and storage/minextents.
                         - Fix check for storage/sxml:freelist and storage/sxml:initial
    rapayne     06/19/07 - Fix alter parallel support.
    lbarton     02/29/08 - flashback archive
    lbarton     01/18/08 - Bug 6724820: table compression
    lbarton     03/19/08 - deferred segment creation
    lbarton     12/29/06 - 
    rapayne     12/20/06 - import kuacomm.xsl
    htseng      12/14/06 - mview support
    htseng      12/12/06 - make alter parallel_clause,Cache callable
    lbarton     11/30/06 - bugfix
    htseng      11/06/06 - move partitions to kuatpar.xsl
    htseng      10/20/06 - more work
    htseng      10/11/06 - add PARSE_LIST
    htseng      10/04/06 - AlterPhysicalAttributes
    htseng      09/29/06 - condition STORAGE tag 
    lbarton     09/22/05 - Initial version
 -->
<xsl:stylesheet version="1.0" xmlns:sxml="http://xmlns.oracle.com/ku" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <!-- Top level imports -->
 <xsl:import href="kuacomm.xsl"/>
 <!-- Top-level parameters -->
 <xsl:param name="LRG">0</xsl:param>
 <!-- Templates -->
 <xsl:template name="AlterTableProperties">
  <xsl:param name="ParentNode" select="''"/>
  <!-- *******************************************************************
Template: AlterTableProperties
Parameters:
 ParentNode - Parent node of SCHEMA, NAME
******************************************************************** -->
  <!-- table organization: heap vs. IOT vs. external vs. cluster -->
  <xsl:call-template name="TableOrganization">
   <xsl:with-param name="ParentNode" select="$ParentNode"/>
   <xsl:with-param name="PhysicalPropertiesNode" select="$ParentNode/sxml:RELATIONAL_TABLE/sxml:PHYSICAL_PROPERTIES | $ParentNode/sxml:OBJECT_TABLE/sxml:PHYSICAL_PROPERTIES | $ParentNode/sxml:XMLTYPE_TABLE/sxml:PHYSICAL_PROPERTIES"/>
  </xsl:call-template>
  <!-- Physical_Attributes, logging_clause , table_compression -->
  <xsl:call-template name="AlterTabProperties">
   <xsl:with-param name="TableNode" select="$ParentNode"/>
   <xsl:with-param name="Partitioning">N</xsl:with-param>
   <xsl:with-param name="ParentNode" select="$ParentNode/sxml:RELATIONAL_TABLE/sxml:PHYSICAL_PROPERTIES/sxml:HEAP_TABLE"/>
  </xsl:call-template>
  <xsl:call-template name="AlterTabProperties">
   <xsl:with-param name="TableNode" select="$ParentNode"/>
   <xsl:with-param name="ParentNode" select=" $ParentNode/sxml:RELATIONAL_TABLE/sxml:TABLE_PROPERTIES/sxml:RANGE_PARTITIONING/sxml:DEFAULT_PHYSICAL_PROPERTIES/sxml:HEAP_TABLE |
$ParentNode/sxml:RELATIONAL_TABLE/sxml:TABLE_PROPERTIES/sxml:HASH_PARTITIONING/sxml:DEFAULT_PHYSICAL_PROPERTIES/sxml:HEAP_TABLE |
$ParentNode/sxml:RELATIONAL_TABLE/sxml:TABLE_PROPERTIES/sxml:LIST_PARTITIONING/sxml:DEFAULT_PHYSICAL_PROPERTIES/sxml:HEAP_TABLE"/>
  </xsl:call-template>
  <!-- Row Movement, Parallel, Cache  -->
  <xsl:call-template name="AlterMiscProperties">
   <xsl:with-param name="ObjectNode" select="$ParentNode"/>
   <xsl:with-param name="PropertyNode" select="$ParentNode/sxml:RELATIONAL_TABLE/sxml:TABLE_PROPERTIES"/>
  </xsl:call-template>
  <!-- flashback archive -->
  <xsl:call-template name="AlterFlashbackArchive">
   <xsl:with-param name="TableNode" select="$ParentNode"/>
   <xsl:with-param name="ParentNode" select="$ParentNode/sxml:RELATIONAL_TABLE/sxml:TABLE_PROPERTIES"/>
  </xsl:call-template>
  <!-- alter_iot_clauses -->
  <xsl:call-template name="AlterIOT">
   <xsl:with-param name="TableNode" select="$ParentNode"/>
   <xsl:with-param name="ParentNode" select="$ParentNode/sxml:RELATIONAL_TABLE"/>
  </xsl:call-template>
  <!-- Supplemental_table_clause -->
  <xsl:call-template name="AlterSupplemental">
   <xsl:with-param name="ParentNode" select="$ParentNode"/>
  </xsl:call-template>
  <!-- allocate_extent_clause -->
  <!-- deallocate_unused_clause -->
 </xsl:template>
 <xsl:template name="TableOrganization">
  <xsl:param name="ParentNode" select="''"/>
  <xsl:param name="PhysicalPropertiesNode" select="''"/>
  <!-- *******************************************************************
Template: TableOrganization - detects non-alterable case:
  can't interconvert between table organizations (heap, IOT, external, cluster)
Parameters:
 ParentNode - Parent node of SCHEMA, NAME
 PhysicalPropertiesNode - PHYSICAL_PROPERTIES
******************************************************************** -->
  <xsl:if test="$PhysicalPropertiesNode/sxml:HEAP_TABLE[@src] or
                $PhysicalPropertiesNode/sxml:INDEX_ORGANIZED_TABLE[@src] or
                $PhysicalPropertiesNode/sxml:EXTERNAL_TABLE[@src] or
                $PhysicalPropertiesNode/sxml:CLUSTER_TABLE[@src]">
   <xsl:element name="ALTER_LIST_ITEM">
    <xsl:if test="$PRS_NAME=1 or 
                  $PRS_CLAUSE_TYPE=1 or
                  $PRS_ALTERABLE=1 or
                  $PRS_XPATH=1">
     <xsl:element name="PARSE_LIST">
      <xsl:call-template name="AddXPathParseItem">
       <xsl:with-param name="Node" select="$PhysicalPropertiesNode"/>
      </xsl:call-template>
      <xsl:call-template name="AddParseItem">
       <xsl:with-param name="ParseIt" select="$PRS_NAME"/>
       <xsl:with-param name="Item">NAME</xsl:with-param>
       <xsl:with-param name="Value1" select="$ParentNode/sxml:NAME"/>
      </xsl:call-template>
      <xsl:call-template name="AddParseItem">
       <xsl:with-param name="ParseIt" select="$PRS_ALTERABLE"/>
       <xsl:with-param name="Item">NOT_ALTERABLE</xsl:with-param>
       <xsl:with-param name="Value1">TABLE_ORGANIZATION</xsl:with-param>
      </xsl:call-template>
     </xsl:element>
    </xsl:if>
    <xsl:element name="SQL_LIST">
     <xsl:element name="SQL_LIST_ITEM">
      <xsl:element name="TEXT">
      <xsl:text>-- Cannot ALTER physical organization of TABLE </xsl:text>
      <xsl:call-template name="SchemaName">
       <xsl:with-param name="ParentNode" select="$ParentNode"/>
      </xsl:call-template>
     </xsl:element>
    </xsl:element>
   </xsl:element>
   </xsl:element>
  </xsl:if>
 </xsl:template>
 <xsl:template name="AlterTabProperties">
  <xsl:param name="TableNode" select="''"/>
  <xsl:param name="ParentNode" select="''"/>
  <xsl:param name="Partition" select="''"/>
  <!-- *******************************************************************
Template: AlterTabProperties
Parameters:
 ParentNode - Parent node of SCHEMA, NAME
******************************************************************** -->
  <xsl:if test="$ParentNode/sxml:SEGMENT_ATTRIBUTES/sxml:PCTFREE/@value1 or
                $ParentNode/sxml:SEGMENT_ATTRIBUTES/sxml:INITRANS/@value1 or
                $ParentNode/sxml:SEGMENT_ATTRIBUTES/sxml:PCTUSED/@value1 or
                $ParentNode/sxml:SEGMENT_ATTRIBUTES/sxml:STORAGE//@value1 or
                ($Partition='N' and $ParentNode/sxml:SEGMENT_ATTRIBUTES/sxml:TABLESPACE/@value1) or
                $ParentNode/sxml:SEGMENT_ATTRIBUTES/sxml:LOGGING/@value1 or
                $ParentNode/sxml:SEGMENT_ATTRIBUTES/sxml:SEGMENT_CREATION_DEFERRED[@src] or
                $ParentNode/sxml:COMPRESS/@value1 or
                $ParentNode/sxml:COMPRESS/@src!='1'">
   <xsl:element name="ALTER_LIST_ITEM">
    <xsl:call-template name="AlterTabPhysical">
     <xsl:with-param name="TableNode" select="$TableNode"/>
     <xsl:with-param name="ParentNode" select="$ParentNode"/>
     <xsl:with-param name="Action">PARSE</xsl:with-param>
    </xsl:call-template>
    <!-- The PARSE side of AlterTabPhysical handles the NOT_ALTERABLE cases for /storage/initial and
           storage/minextents. So, if this is the only thing that had been modified then we don't want 
           to call the sql side of AlterTabPhysical
-->
    <xsl:if test="$ParentNode/sxml:SEGMENT_ATTRIBUTES/sxml:PCTFREE/@value1 or
                $ParentNode/sxml:SEGMENT_ATTRIBUTES/sxml:INITRANS/@value1 or
                $ParentNode/sxml:SEGMENT_ATTRIBUTES/sxml:PCTUSED/@value1 or
                $ParentNode/sxml:SEGMENT_ATTRIBUTES/sxml:STORAGE/sxml:NEXT/@value1 or
                $ParentNode/sxml:SEGMENT_ATTRIBUTES/sxml:STORAGE/sxml:MAXEXTENTS/@value1 or
                $ParentNode/sxml:SEGMENT_ATTRIBUTES/sxml:STORAGE/sxml:PCTINCREASE/@value1 or
                $ParentNode/sxml:SEGMENT_ATTRIBUTES/sxml:STORAGE/sxml:FREELISTS/@value1 or
                $ParentNode/sxml:SEGMENT_ATTRIBUTES/sxml:STORAGE/sxml:FREELIST_GROUP/@value1 or
                $ParentNode/sxml:SEGMENT_ATTRIBUTES/sxml:STORAGE/sxml:BUFFER_POOL/@value1 or
                $ParentNode/sxml:SEGMENT_ATTRIBUTES/sxml:STORAGE/sxml:FLASH_CACHE/@value1 or
                $ParentNode/sxml:SEGMENT_ATTRIBUTES/sxml:STORAGE/sxml:CELL_FLASH_CACHE/@value1 or
                ($Partition='N' and $ParentNode/sxml:SEGMENT_ATTRIBUTES/sxml:TABLESPACE/@value1) or
                $ParentNode/sxml:SEGMENT_ATTRIBUTES/sxml:LOGGING/@value1 or
                $ParentNode/sxml:SEGMENT_ATTRIBUTES/sxml:SEGMENT_CREATION_DEFERRED[@src] or
                $ParentNode/sxml:COMPRESS/@value1 or
                $ParentNode/sxml:COMPRESS/@src!='1'">
    <xsl:call-template name="AlterTabPhysical">
     <xsl:with-param name="TableNode" select="$TableNode"/>
     <xsl:with-param name="ParentNode" select="$ParentNode"/>
     <xsl:with-param name="Action">SQL</xsl:with-param>
    </xsl:call-template>
    </xsl:if>
   </xsl:element>
  </xsl:if>
 </xsl:template>
 <xsl:template name="AlterTabPhysical">
  <xsl:param name="TableNode" select="''"/>
  <xsl:param name="ParentNode" select="''"/>
  <xsl:param name="Action" select="''"/>
  <!-- *******************************************************************
Template: AlterTabPhysical
Parameters:
 ParentNode - Parent node of SCHEMA, NAME
******************************************************************** -->
  <xsl:choose>
   <xsl:when test="$Action='PARSE' and ($PRS_NAME=1 or 
                                        $PRS_CLAUSE_TYPE=1 or
                                        $PRS_COLUMN_ATTRIBUTE=1 or
                                        $PRS_ALTERABLE=1 or
                                        $PRS_XPATH=1)">
    <xsl:element name="PARSE_LIST">
     <xsl:call-template name="AddXPathParseItem">
      <xsl:with-param name="Node" select="$ParentNode"/>
     </xsl:call-template>
     <xsl:call-template name="AddParseItem">
      <xsl:with-param name="ParseIt" select="$PRS_NAME"/>
      <xsl:with-param name="Item">NAME</xsl:with-param>
      <xsl:with-param name="Value1" select="sxml:NAME"/>
     </xsl:call-template>
     <xsl:call-template name="AddParseItem">
      <xsl:with-param name="ParseIt" select="$PRS_CLAUSE_TYPE"/>
      <xsl:with-param name="Item">CLAUSE_TYPE</xsl:with-param>
      <xsl:with-param name="Value1">PHYSICAL_ATTRIBUTES</xsl:with-param>
     </xsl:call-template>
     <xsl:if test="$ParentNode/sxml:SEGMENT_ATTRIBUTES/sxml:STORAGE/sxml:FREELIST_GROUPS/@value1">
      <xsl:call-template name="AddParseItem">
       <xsl:with-param name="ParseIt" select="$PRS_ALTERABLE"/>
       <xsl:with-param name="Item">NOT_ALTERABLE</xsl:with-param>
       <xsl:with-param name="Value1">FREELIST GROUPS</xsl:with-param>
      </xsl:call-template>
     </xsl:if>
     <xsl:if test="$ParentNode/sxml:SEGMENT_ATTRIBUTES/sxml:STORAGE/sxml:INITIAL/@value1">
      <xsl:call-template name="AddXPathParseItem">
       <xsl:with-param name="Node" select="$ParentNode/sxml:SEGMENT_ATTRIBUTES/sxml:STORAGE/sxml:INITIAL"/>
      </xsl:call-template>
      <xsl:call-template name="AddParseItem">
       <xsl:with-param name="ParseIt" select="$PRS_ALTERABLE"/>
       <xsl:with-param name="Item">NOT_ALTERABLE</xsl:with-param>
       <xsl:with-param name="Value1">INITIAL</xsl:with-param>
      </xsl:call-template>
     </xsl:if>
     <xsl:if test="$ParentNode/sxml:SEGMENT_ATTRIBUTES/sxml:STORAGE/sxml:MINEXTENTS/@value1">
      <xsl:call-template name="AddXPathParseItem">
       <xsl:with-param name="Node" select="$ParentNode/sxml:SEGMENT_ATTRIBUTES/sxml:STORAGE/sxml:MINEXTENTS"/>
      </xsl:call-template>
      <xsl:call-template name="AddParseItem">
       <xsl:with-param name="ParseIt" select="$PRS_ALTERABLE"/>
       <xsl:with-param name="Item">NOT_ALTERABLE</xsl:with-param>
       <xsl:with-param name="Value1">MINEXTENTS</xsl:with-param>
      </xsl:call-template>
     </xsl:if>
     <xsl:if test="$ParentNode/sxml:SEGMENT_ATTRIBUTES/sxml:SEGMENT_CREATION_DEFERRED/@src='2'">
      <!-- not possible to convert a table which already has segments
            to segment creation deferred (though the reverse is possible) -->
      <xsl:call-template name="AddParseItem">
       <xsl:with-param name="ParseIt" select="$PRS_ALTERABLE"/>
       <xsl:with-param name="Item">NOT_ALTERABLE</xsl:with-param>
       <xsl:with-param name="Value1">SEGMENT_CREATION_DEFERRED</xsl:with-param>
      </xsl:call-template>
     </xsl:if>
    </xsl:element>
   </xsl:when>
   <xsl:when test="$Action='SQL'">
    <xsl:element name="SQL_LIST">
     <xsl:choose>
      <xsl:when test="$ParentNode/sxml:SEGMENT_ATTRIBUTES/sxml:SEGMENT_CREATION_DEFERRED/@src='2'">
     <xsl:element name="SQL_LIST_ITEM">
        <xsl:element name="TEXT">
         <xsl:text>-- Cannot ALTER to make segment creation deferred TABLE </xsl:text>
         <xsl:call-template name="SchemaName">
          <xsl:with-param name="ParentNode" select="$TableNode"/>
         </xsl:call-template>
        </xsl:element>
       </xsl:element>
      </xsl:when>
      <xsl:otherwise>
       <xsl:element name="SQL_LIST_ITEM">
        <xsl:element name="TEXT">
      <xsl:text>ALTER TABLE </xsl:text>
      <xsl:call-template name="SchemaName">
       <xsl:with-param name="ParentNode" select="$TableNode"/>
      </xsl:call-template>
      <!-- Physical_Attributes -->
      <xsl:call-template name="AlterPhysicalAttributes">
       <xsl:with-param name="ParentNode" select="$ParentNode/sxml:SEGMENT_ATTRIBUTES"/>
      </xsl:call-template>
      <!-- logging_clause -->
      <xsl:call-template name="AlterLogging">
       <xsl:with-param name="ParentNode" select="$ParentNode/sxml:SEGMENT_ATTRIBUTES"/>
      </xsl:call-template>
      <!-- table_compression -->
      <xsl:call-template name="AlterCompress">
       <xsl:with-param name="ParentNode" select="$ParentNode"/>
      </xsl:call-template>
     </xsl:element>
    </xsl:element>
      </xsl:otherwise>
     </xsl:choose>
    </xsl:element>
   </xsl:when>
  </xsl:choose>
 </xsl:template>
 <xsl:template name="AlterPhysicalAttributes">
  <xsl:param name="ParentNode" select="''"/>
  <xsl:param name="TypeNode" select="''"/>
  <!-- *******************************************************************
Template: AlterPhysicalAttributes
Parameters:
 ParentNode - Parent node of SEGMENT_ATTRIBUTES
 TypeNode   - ADD or '' (modify)
******************************************************************** -->
  <!-- Physical_attributes_clause -->
  <xsl:choose>
   <xsl:when test="$TypeNode='ADD'">
    <xsl:if test="$ParentNode/sxml:PCTFREE">
     <xsl:text> PCTFREE </xsl:text>
     <xsl:value-of select="$ParentNode/sxml:PCTFREE"/>
    </xsl:if>
    <xsl:if test="$ParentNode/sxml:PCTUSED">
     <xsl:text> PCTUSED </xsl:text>
     <xsl:value-of select="$ParentNode/sxml:PCTUSED"/>
    </xsl:if>
    <xsl:if test="$ParentNode/sxml:INITRANS">
     <xsl:text> INITRANS </xsl:text>
     <xsl:value-of select="$ParentNode/sxml:INITRANS"/>
    </xsl:if>
   </xsl:when>
   <xsl:otherwise>
    <!-- ALTER TABLE MOVE causes segments to be created -->
    <xsl:if test="$ParentNode/sxml:SEGMENT_CREATION_DEFERRED/@src='1'">
     <xsl:text> MOVE</xsl:text>
    </xsl:if>
    <xsl:if test="$ParentNode/sxml:PCTFREE[@value1]">
     <xsl:text> PCTFREE </xsl:text>
     <xsl:value-of select="$ParentNode/sxml:PCTFREE"/>
    </xsl:if>
    <xsl:if test="$ParentNode/sxml:PCTUSED[@value1]">
     <xsl:text> PCTUSED </xsl:text>
     <xsl:value-of select="$ParentNode/sxml:PCTUSED"/>
    </xsl:if>
    <xsl:if test="$ParentNode/sxml:INITRANS[@value1]">
     <xsl:text> INITRANS </xsl:text>
     <xsl:value-of select="$ParentNode/sxml:INITRANS"/>
    </xsl:if>
   </xsl:otherwise>
  </xsl:choose>
  <!-- storage_clause -->
  <xsl:if test="$ParentNode/sxml:STORAGE">
   <xsl:call-template name="AlterStorage">
    <xsl:with-param name="ParentNode" select="$ParentNode/sxml:STORAGE"/>
    <xsl:with-param name="TypeNode" select="$TypeNode"/>
   </xsl:call-template>
  </xsl:if>
 </xsl:template>
 <xsl:template name="AlterStorage">
  <xsl:param name="ParentNode" select="''"/>
  <xsl:param name="TypeNode" select="''"/>
  <!-- *******************************************************************
Template: AlterStorage
Parameters:
 ParentNode - $ParentNode/sxml:RELATIONAL_TABLE/sxml:PHYSICAL_PROPERTIES/sxml:HEAP_TABLE/sxml:SEGMENT_ATTRIBUTES/sxml:STORAGE
 TypeNode   - ADD or '' (modify)
******************************************************************** -->
  <xsl:choose>
   <xsl:when test="$TypeNode='ADD' or $ParentNode/@src='2'">
    <xsl:text> STORAGE (</xsl:text>
    <xsl:if test="$ParentNode/sxml:INITIAL">
     <xsl:text> INITIAL </xsl:text>
     <xsl:value-of select="$ParentNode/sxml:INITIAL"/>
    </xsl:if>
    <xsl:if test="$ParentNode/sxml:NEXT">
     <xsl:text> NEXT </xsl:text>
     <xsl:value-of select="$ParentNode/sxml:NEXT"/>
    </xsl:if>
    <xsl:if test="$ParentNode/sxml:MINEXTENTS">
     <xsl:text> MINEXTENTS </xsl:text>
     <xsl:value-of select="$ParentNode/sxml:MINEXTENTS"/>
    </xsl:if>
    <xsl:if test="$ParentNode/sxml:MAXEXTENTS">
     <xsl:text> MAXEXTENTS </xsl:text>
     <xsl:value-of select="$ParentNode/sxml:MAXEXTENTS"/>
    </xsl:if>
    <xsl:if test="$ParentNode/sxml:PCTINCREASE">
     <xsl:text> PCTINCREASE </xsl:text>
     <xsl:value-of select="$ParentNode/sxml:PCTINCREASE"/>
    </xsl:if>
    <xsl:if test="$ParentNode/sxml:FREELISTS">
     <xsl:text> FREELISTS </xsl:text>
     <xsl:value-of select="$ParentNode/sxml:FREELISTS"/>
    </xsl:if>
    <xsl:if test="$ParentNode/sxml:FREELIST_GROUPS">
     <xsl:text> FREELIST GROUPS </xsl:text>
     <xsl:value-of select="$ParentNode/sxml:FREELIST_GROUPS"/>
    </xsl:if>
    <xsl:if test="$ParentNode/sxml:BUFFER_POOL">
     <xsl:text> BUFFER_POOL </xsl:text>
     <xsl:value-of select="$ParentNode/sxml:BUFFER_POOL"/>
    </xsl:if>
    <xsl:if test="$ParentNode/sxml:FLASH_CACHE">
     <xsl:text> FLASH_CACHE </xsl:text>
     <xsl:value-of select="$ParentNode/sxml:FLASH_CACHE"/>
    </xsl:if>
    <xsl:if test="$ParentNode/sxml:CELL_FLASH_CACHE">
     <xsl:text> CELL_FLASH_CACHE </xsl:text>
     <xsl:value-of select="$ParentNode/sxml:CELL_FLASH_CACHE"/>
    </xsl:if>
    <xsl:text>) </xsl:text>
   </xsl:when>
   <xsl:otherwise>
    <xsl:if test="$ParentNode/sxml:NEXT[@value1] 
	or $ParentNode/sxml:MINEXTENTS[@value1] 
	or $ParentNode/sxml:MAXEXTENTS[@value1] 
	or  $ParentNode/sxml:PCTINCREASE[@value1] 
	or $ParentNode/sxml:FREELISTS[@value1]
	or $ParentNode/sxml:BUFFER_POOL[@value1]
	or $ParentNode/sxml:FLASH_CACHE[@value1]
	or $ParentNode/sxml:CELL_FLASH_CACHE[@value1]">
     <xsl:text> STORAGE (</xsl:text>
     <!-- ORA-02203: INITIAL storage options not allowed -->
     <xsl:if test="$ParentNode/sxml:NEXT[@value1]">
      <xsl:text> NEXT </xsl:text>
      <xsl:value-of select="$ParentNode/sxml:NEXT"/>
     </xsl:if>
     <xsl:if test="$ParentNode/sxml:MINEXTENTS[@value1]">
      <xsl:text> MINEXTENTS </xsl:text>
      <xsl:value-of select="$ParentNode/sxml:MINEXTENTS"/>
     </xsl:if>
     <xsl:if test="$ParentNode/sxml:MAXEXTENTS[@value1]">
      <xsl:text> MAXEXTENTS </xsl:text>
      <xsl:value-of select="$ParentNode/sxml:MAXEXTENTS"/>
     </xsl:if>
     <xsl:if test="$ParentNode/sxml:PCTINCREASE[@value1]">
      <xsl:text> PCTINCREASE </xsl:text>
      <xsl:value-of select="$ParentNode/sxml:PCTINCREASE"/>
     </xsl:if>
     <xsl:if test="$ParentNode/sxml:FREELISTS[@value1]">
      <xsl:text> FREELISTS </xsl:text>
      <xsl:value-of select="$ParentNode/sxml:FREELISTS"/>
     </xsl:if>
     <!-- ORA-02170: FREELIST GROUPS storage option not allowed -->
     <xsl:if test="$ParentNode/sxml:BUFFER_POOL[@value1]">
      <xsl:text> BUFFER_POOL </xsl:text>
      <xsl:value-of select="$ParentNode/sxml:BUFFER_POOL"/>
     </xsl:if>
     <xsl:if test="$ParentNode/sxml:FLASH_CACHE[@value1]">
      <xsl:text> FLASH_CACHE </xsl:text>
      <xsl:value-of select="$ParentNode/sxml:FLASH_CACHE"/>
     </xsl:if>
     <xsl:if test="$ParentNode/sxml:CELL_FLASH_CACHE[@value1]">
      <xsl:text> CELL_FLASH_CACHE </xsl:text>
      <xsl:value-of select="$ParentNode/sxml:CELL_FLASH_CACHE"/>
     </xsl:if>
     <xsl:text>) </xsl:text>
    </xsl:if>
   </xsl:otherwise>
  </xsl:choose>
 </xsl:template>
 <xsl:template name="AlterSegmentAttributes">
  <xsl:param name="ParentNode" select="''"/>
  <xsl:param name="TypeNode" select="''"/>
  <!-- *******************************************************************
Template: AlterSegmentAttributes
Parameters:
 ParentNode - $ParentNode/sxml:RELATIONAL_TABLE/sxml:PHYSICAL_PROPERTIES/sxml:HEAP_TABLE/sxml:SEGMENT_ATTRIBUTES
 TypeNode   - ADD or '' (modify)
******************************************************************** -->
  <!-- Physical_Attributes -->
  <xsl:call-template name="AlterPhysicalAttributes">
   <xsl:with-param name="ParentNode" select="$ParentNode"/>
   <xsl:with-param name="TypeNode" select="$TypeNode"/>
  </xsl:call-template>
  <!-- Tablespace -->
  <xsl:apply-templates select="$ParentNode/sxml:TABLESPACE"/>
  <!-- logging_clause -->
  <xsl:call-template name="AlterLogging">
   <xsl:with-param name="ParentNode" select="$ParentNode"/>
   <xsl:with-param name="TypeNode" select="'ADD'"/>
  </xsl:call-template>
 </xsl:template>
 <xsl:template name="AlterLogging">
  <xsl:param name="ParentNode" select="''"/>
  <xsl:param name="TypeNode" select="''"/>
  <!-- *******************************************************************
Template: AlterLogging
Parameters:
 ParentNode -  $ParentNode/sxml:RELATIONAL_TABLE/sxml:PHYSICAL_PROPERTIES/sxml:HEAP_TABLE/sxml:SEGMENT_ATTRIBUTES
 TypeNode   - ADD or '' (modify)
******************************************************************** -->
  <xsl:if test="$TypeNode='ADD' or $ParentNode/sxml:LOGGING[@value1]">
   <xsl:apply-templates select="$ParentNode/sxml:LOGGING"/>
  </xsl:if>
 </xsl:template>
 <xsl:template name="AlterTablespace">
  <xsl:param name="ParentNode" select="''"/>
  <!-- *******************************************************************
Template: AlterTablespace
Parameters:
 ParentNode -  $ParentNode/sxml:RELATIONAL_TABLE/sxml:PHYSICAL_PROPERTIES/sxml:HEAP_TABLE/sxml:SEGMENT_ATTRIBUTES/sxml:TABLESPACE
******************************************************************** -->
  <xsl:if test="$ParentNode/sxml:TABLESPACE">
   <xsl:text> TABLESPACE </xsl:text>
   <xsl:apply-templates select="$ParentNode/sxml:TABLESPACE"/>
  </xsl:if>
 </xsl:template>
 <xsl:template name="AlterCompress">
  <xsl:param name="ParentNode" select="''"/>
  <!-- *******************************************************************
Template: AlterCompress - table compression
Parameters:
 ParentNode -  $ParentNode/sxml:RELATIONAL_TABLE/sxml:PHYSICAL_PROPERTIES/sxml:HEAP_TABLE
******************************************************************** -->
  <xsl:choose>
   <xsl:when test="$ParentNode/sxml:COMPRESS/@value1 or $ParentNode/sxml:COMPRESS/@src='2'">
     <xsl:choose>
     <xsl:when test="$ParentNode/sxml:COMPRESS='N'"> NOCOMPRESS </xsl:when>
     <xsl:when test="$ParentNode/sxml:COMPRESS='ALL'"> COMPRESS FOR ALL OPERATIONS </xsl:when>
     <xsl:when test="$ParentNode/sxml:COMPRESS='DIRECT_LOAD'"> COMPRESS </xsl:when>
     </xsl:choose>
   </xsl:when>
   <xsl:when test="$ParentNode/sxml:COMPRESS/@src='1'"> NOCOMPRESS </xsl:when>
  </xsl:choose>
 </xsl:template>
 <xsl:template name="AlterSupplemental">
  <xsl:param name="ParentNode" select="''"/>
  <!-- *******************************************************************
Template: AlterSupplemental
Parameters:
 ParentNode - Parent node of SCHEMA, NAME, constraint lists
******************************************************************** -->
  <xsl:if test="$ParentNode/sxml:RELATIONAL_TABLE/sxml:SUPPLEMENTAL_LOGGING">
   <!-- supplemental_log_grp_clause -->
   <xsl:call-template name="AlterGroupList">
    <xsl:with-param name="ParentNode" select="$ParentNode"/>
    <xsl:with-param name="GroupListNode" select="$ParentNode/sxml:RELATIONAL_TABLE/sxml:SUPPLEMENTAL_LOGGING/sxml:GROUP_LIST/sxml:GROUP_LIST_ITEM"/>
    <xsl:with-param name="DoAll">
     <xsl:choose>
      <xsl:when test="$ParentNode/sxml:RELATIONAL_TABLE/sxml:SUPPLEMENTAL_LOGGING/@src='1'">DROP</xsl:when>
      <xsl:when test="$ParentNode/sxml:RELATIONAL_TABLE/sxml:SUPPLEMENTAL_LOGGING/@src='2'">ADD</xsl:when>
      <xsl:otherwise>N</xsl:otherwise>
     </xsl:choose>
    </xsl:with-param>
   </xsl:call-template>
   <!-- supplemental_id_key_clause -->
   <xsl:call-template name="AlterIDList">
    <xsl:with-param name="ParentNode" select="$ParentNode"/>
    <xsl:with-param name="IDListNode" select="$ParentNode/sxml:RELATIONAL_TABLE/sxml:SUPPLEMENTAL_LOGGING/sxml:ID_LIST/sxml:ID_LIST_ITEM"/>
    <xsl:with-param name="DoAll">
     <xsl:choose>
      <xsl:when test="$ParentNode/sxml:RELATIONAL_TABLE/sxml:SUPPLEMENTAL_LOGGING/@src='1'">DROP</xsl:when>
      <xsl:when test="$ParentNode/sxml:RELATIONAL_TABLE/sxml:SUPPLEMENTAL_LOGGING/@src='2'">ADD</xsl:when>
      <xsl:otherwise>N</xsl:otherwise>
     </xsl:choose>
    </xsl:with-param>
   </xsl:call-template>
  </xsl:if>
 </xsl:template>
 <xsl:template name="AlterGroupList">
  <xsl:param name="ParentNode" select="''"/>
  <xsl:param name="GroupListNode" select="''"/>
  <xsl:param name="DoAll">N</xsl:param>
  <!-- *******************************************************************
Template: AlterGroupList
Parameters:
 ParentNode - sxml:RELATIONAL_TABLE/sxml:SUPPLEMENTAL_LOGGING
 GroupNode - sxml:RELATIONAL_TABLE/sxml:SUPPLEMENTAL_LOGGING/sxml:GROUP_LIST
 DoAll - "DROP" = entire list is in doc1, not in doc2
         "ADD"  = entire list is in doc2, not in doc1
         "N"    = otherwise
******************************************************************** -->
  <xsl:for-each select="$GroupListNode">
   <xsl:choose>
    <xsl:when test="$DoAll='DROP'">
     <xsl:call-template name="SupplementLogs">
      <xsl:with-param name="ParentNode" select="$ParentNode"/>
      <xsl:with-param name="GroupNameNode" select="$GroupListNode/sxml:NAME"/>
      <xsl:with-param name="TypeNode" select="'DROP'"/>
     </xsl:call-template>
    </xsl:when>
    <xsl:when test="$DoAll='ADD'">
     <xsl:call-template name="SupplementLogs">
      <xsl:with-param name="ParentNode" select="$ParentNode"/>
      <xsl:with-param name="GroupNameNode" select="$GroupListNode/sxml:NAME"/>
      <xsl:with-param name="GroupListNode" select="$GroupListNode"/>
      <xsl:with-param name="TypeNode" select="'ADD'"/>
     </xsl:call-template>
    </xsl:when>
    <xsl:when test="$GroupListNode/sxml:NAME[@value1]">
     <xsl:call-template name="SupplementLogs">
      <xsl:with-param name="ParentNode" select="$ParentNode"/>
      <xsl:with-param name="GroupNameNode" select="$GroupListNode/sxml:NAME/@value1"/>
      <xsl:with-param name="TypeNode" select="'DROP'"/>
     </xsl:call-template>
     <xsl:call-template name="SupplementLogs">
      <xsl:with-param name="ParentNode" select="$ParentNode"/>
      <xsl:with-param name="GroupNameNode" select="$GroupListNode/sxml:NAME"/>
      <xsl:with-param name="GroupListNode" select="$GroupListNode"/>
      <xsl:with-param name="TypeNode" select="'ADD'"/>
     </xsl:call-template>
    </xsl:when>
   </xsl:choose>
  </xsl:for-each>
 </xsl:template>
 <xsl:template name="SupplementLogs">
  <xsl:param name="ParentNode" select="''"/>
  <xsl:param name="GroupListNode" select="''"/>
  <xsl:param name="GroupNameNode" select="''"/>
  <xsl:param name="TypeNode" select="''"/>
  <!-- *******************************************************************
Template: SupplementLogs
Parameters:
 ParentNode - sxml:RELATIONAL_TABLE/sxml:SUPPLEMENTAL_LOGGING
 GrouplistNode - sxml:RELATIONAL_TABLE/sxml:SUPPLEMENTAL_LOGGING/sxml:GROUP_LIST/sxml:GROUP_LIST_ITEM
 GroupNameNode - sxml:RELATIONAL_TABLE/sxml:SUPPLEMENTAL_LOGGING/sxml:GROUP_LIST/sxml:GROUP_LIST_ITEM/sxml:NAME
 TypeNode - ADD or DROP
******************************************************************** -->
  <xsl:element name="ALTER_LIST_ITEM">
   <xsl:call-template name="SupplementLog">
    <xsl:with-param name="ParentNode" select="$ParentNode"/>
    <xsl:with-param name="GroupNameNode" select="$GroupNameNode"/>
    <xsl:with-param name="GroupListNode" select="$GroupListNode"/>
    <xsl:with-param name="TypeNode" select="$TypeNode"/>
    <xsl:with-param name="Action">PARSE</xsl:with-param>
   </xsl:call-template>
   <xsl:call-template name="SupplementLog">
    <xsl:with-param name="ParentNode" select="$ParentNode"/>
    <xsl:with-param name="GroupNameNode" select="$GroupNameNode"/>
    <xsl:with-param name="GroupListNode" select="$GroupListNode"/>
    <xsl:with-param name="TypeNode" select="$TypeNode"/>
    <xsl:with-param name="Action">SQL</xsl:with-param>
   </xsl:call-template>
  </xsl:element>
 </xsl:template>
 <xsl:template name="SupplementLog">
  <xsl:param name="ParentNode" select="''"/>
  <xsl:param name="GroupListNode" select="''"/>
  <xsl:param name="GroupNameNode" select="''"/>
  <xsl:param name="TypeNode" select="''"/>
  <xsl:param name="Action" select="''"/>
  <!-- *******************************************************************
Template: SupplementLog
Parameters:
 ParentNode - sxml:RELATIONAL_TABLE/sxml:SUPPLEMENTAL_LOGGING
 GrouplistNode - sxml:RELATIONAL_TABLE/sxml:SUPPLEMENTAL_LOGGING/sxml:GROUP_LIST/sxml:GROUP_LIST_ITEM
 GroupNameNode - sxml:RELATIONAL_TABLE/sxml:SUPPLEMENTAL_LOGGING/sxml:GROUP_LIST/sxml:GROUP_LIST_ITEM/sxml:NAME
 TypeNode - ADD or DROP
******************************************************************** -->
  <xsl:choose>
   <xsl:when test="$Action='PARSE' and ($PRS_NAME=1 or 
                                        $PRS_CLAUSE_TYPE=1 or
                                        $PRS_COLUMN_ATTRIBUTE=1 or
                                        $PRS_ALTERABLE=1 or
                                        $PRS_XPATH=1)">
    <xsl:element name="PARSE_LIST">
     <xsl:call-template name="AddXPathParseItem">
      <xsl:with-param name="Node" select="$GroupNameNode"/>
     </xsl:call-template>
     <xsl:call-template name="AddParseItem">
      <xsl:with-param name="ParseIt" select="$PRS_NAME"/>
      <xsl:with-param name="Item">NAME</xsl:with-param>
      <xsl:with-param name="Value1" select="$GroupNameNode"/>
     </xsl:call-template>
     <xsl:call-template name="AddParseItem">
      <xsl:with-param name="ParseIt" select="$PRS_CLAUSE_TYPE"/>
      <xsl:with-param name="Item">CLAUSE_TYPE</xsl:with-param>
      <xsl:with-param name="Value1">
       <xsl:if test="$TypeNode='ADD'">ADD_SUPPLEMENTAL_LOGGING</xsl:if>
       <xsl:if test="$TypeNode='DROP'">DROP_SUPPLEMENTAL_LOGGING</xsl:if>
      </xsl:with-param>
     </xsl:call-template>
    </xsl:element>
   </xsl:when>
   <xsl:when test="$Action='SQL'">
    <xsl:element name="SQL_LIST">
     <xsl:element name="SQL_LIST_ITEM">
      <xsl:element name="TEXT">
      <xsl:text>ALTER TABLE </xsl:text>
      <xsl:call-template name="SchemaName">
       <xsl:with-param name="ParentNode" select="$ParentNode"/>
      </xsl:call-template>
      <xsl:choose>
       <xsl:when test="$TypeNode='ADD'">
        <xsl:text> ADD </xsl:text>
       </xsl:when>
       <xsl:when test="$TypeNode='DROP'">
        <xsl:text> DROP </xsl:text>
       </xsl:when>
       <xsl:otherwise/>
      </xsl:choose>
      <xsl:text>SUPPLEMENTAL LOG GROUP </xsl:text>
      <xsl:value-of select="$GroupNameNode"/>
      <xsl:if test="$TypeNode='ADD'">
       <xsl:text>(</xsl:text>
       <xsl:call-template name="AlterCOL_LIST">
        <xsl:with-param name="ColListItems" select="$GroupListNode/sxml:COL_LIST/sxml:COL_LIST_ITEM"/>
       </xsl:call-template>
       <xsl:text>)</xsl:text>
       <xsl:if test="$GroupListNode/sxml:ALWAYS[@src!='1']">
        <xsl:text> ALWAYS </xsl:text>
       </xsl:if>
      </xsl:if>
     </xsl:element>
    </xsl:element>
    </xsl:element>
   </xsl:when>
  </xsl:choose>
 </xsl:template>
 <xsl:template name="AlterIDList">
  <xsl:param name="ParentNode" select="''"/>
  <xsl:param name="IDListNode" select="''"/>
  <xsl:param name="DoAll">N</xsl:param>
  <!-- *******************************************************************
Template: AlterIDList
Parameters:
 ParentNode - sxml:RELATIONAL_TABLE/sxml:SUPPLEMENTAL_LOGGING
 GroupNode - sxml:RELATIONAL_TABLE/sxml:SUPPLEMENTAL_LOGGING/sxml:ID_LIST
******************************************************************** -->
  <xsl:for-each select="$IDListNode">
   <xsl:choose>
    <xsl:when test="$DoAll='DROP' or @src='1'">
     <xsl:call-template name="SupplementIDLogs">
      <xsl:with-param name="ParentNode" select="$ParentNode"/>
      <xsl:with-param name="IDListNode" select="sxml:COLUMNS"/>
      <xsl:with-param name="TypeNode" select="'DROP'"/>
     </xsl:call-template>
    </xsl:when>
    <xsl:when test="$DoAll='ADD' or @src='2'">
     <xsl:call-template name="SupplementIDLogs">
      <xsl:with-param name="ParentNode" select="$ParentNode"/>
      <xsl:with-param name="IDListNode" select="sxml:COLUMNS"/>
      <xsl:with-param name="TypeNode" select="'ADD'"/>
     </xsl:call-template>
    </xsl:when>
    <xsl:when test="$IDListNode/sxml:COLUMNS[@value1]">
     <xsl:call-template name="SupplementIDLogs">
      <xsl:with-param name="ParentNode" select="$ParentNode"/>
      <xsl:with-param name="IDListNode" select="sxml:COLUMNS/@value1"/>
      <xsl:with-param name="TypeNode" select="'DROP'"/>
     </xsl:call-template>
     <xsl:call-template name="SupplementIDLogs">
      <xsl:with-param name="ParentNode" select="$ParentNode"/>
      <xsl:with-param name="IDListNode" select="sxml:COLUMNS"/>
      <xsl:with-param name="TypeNode" select="'ADD'"/>
     </xsl:call-template>
    </xsl:when>
   </xsl:choose>
  </xsl:for-each>
 </xsl:template>
 <xsl:template name="SupplementIDLogs">
  <xsl:param name="ParentNode" select="''"/>
  <xsl:param name="IDListNode" select="''"/>
  <xsl:param name="TypeNode" select="''"/>
  <!-- *******************************************************************
Template: SupplementIDLogs
Parameters:
 ParentNode - sxml:RELATIONAL_TABLE/sxml:SUPPLEMENTAL_LOGGING
 GroupNode - sxml:RELATIONAL_TABLE/sxml:SUPPLEMENTAL_LOGGING/sxml:GROUP_LIST/sxml:GROUP_LIST_ITEM/sxml:NAME
 TypeNode - ADD or DROP
******************************************************************** -->
  <xsl:element name="ALTER_LIST_ITEM">
   <xsl:call-template name="SupplementIDLog">
    <xsl:with-param name="ParentNode" select="$ParentNode"/>
    <xsl:with-param name="IDListNode" select="$IDListNode"/>
    <xsl:with-param name="TypeNode" select="$TypeNode"/>
    <xsl:with-param name="Action">PARSE</xsl:with-param>
   </xsl:call-template>
   <xsl:call-template name="SupplementIDLog">
    <xsl:with-param name="ParentNode" select="$ParentNode"/>
    <xsl:with-param name="IDListNode" select="$IDListNode"/>
    <xsl:with-param name="TypeNode" select="$TypeNode"/>
    <xsl:with-param name="Action">SQL</xsl:with-param>
   </xsl:call-template>
  </xsl:element>
 </xsl:template>
 <xsl:template name="SupplementIDLog">
  <xsl:param name="ParentNode" select="''"/>
  <xsl:param name="IDListNode" select="''"/>
  <xsl:param name="TypeNode" select="''"/>
  <xsl:param name="Action" select="''"/>
  <!-- *******************************************************************
Template: SupplementIDLog
Parameters:
 ParentNode - sxml:RELATIONAL_TABLE/sxml:SUPPLEMENTAL_LOGGING
 GroupNode - sxml:RELATIONAL_TABLE/sxml:SUPPLEMENTAL_LOGGING/sxml:GROUP_LIST/sxml:GROUP_LIST_ITEM/sxml:NAME
 TypeNode - ADD or DROP
 Action _ PARSE or SQL
******************************************************************** -->
  <xsl:choose>
   <xsl:when test="$Action='PARSE' and ($PRS_NAME=1 or 
                                        $PRS_CLAUSE_TYPE=1 or
                                        $PRS_COLUMN_ATTRIBUTE=1 or
                                        $PRS_ALTERABLE=1 or
                                        $PRS_XPATH=1)">
    <xsl:element name="PARSE_LIST">
     <xsl:call-template name="AddXPathParseItem">
      <xsl:with-param name="Node" select="$IDListNode"/>
     </xsl:call-template>
     <xsl:call-template name="AddParseItem">
      <xsl:with-param name="ParseIt" select="$PRS_NAME"/>
      <xsl:with-param name="Item">NAME</xsl:with-param>
      <xsl:with-param name="Value1" select="$IDListNode"/>
     </xsl:call-template>
     <xsl:call-template name="AddParseItem">
      <xsl:with-param name="ParseIt" select="$PRS_CLAUSE_TYPE"/>
      <xsl:with-param name="Item">CLAUSE_TYPE</xsl:with-param>
      <xsl:with-param name="Value1">
       <xsl:if test="$TypeNode='ADD'">ADD_SUPPLEMENTAL_ID_KEY</xsl:if>
       <xsl:if test="$TypeNode='DROP'">DROP_SUPPLEMENTAL_ID_KEY</xsl:if>
      </xsl:with-param>
     </xsl:call-template>
    </xsl:element>
   </xsl:when>
   <xsl:when test="$Action='SQL'">
    <xsl:element name="SQL_LIST">
     <xsl:element name="SQL_LIST_ITEM">
      <xsl:element name="TEXT">
      <xsl:text>ALTER TABLE </xsl:text>
      <xsl:call-template name="SchemaName">
       <xsl:with-param name="ParentNode" select="$ParentNode"/>
      </xsl:call-template>
      <xsl:choose>
       <xsl:when test="$TypeNode='ADD'">
        <xsl:text> ADD </xsl:text>
       </xsl:when>
       <xsl:when test="$TypeNode='DROP'">
        <xsl:text> DROP </xsl:text>
       </xsl:when>
      </xsl:choose>
      <xsl:text>SUPPLEMENTAL LOG DATA (</xsl:text>
      <xsl:choose>
       <xsl:when test="$IDListNode='ALL'">ALL</xsl:when>
       <xsl:when test="$IDListNode='PRIMARY_KEY'">PRIMARY KEY</xsl:when>
       <xsl:when test="$IDListNode='UNIQUE'">UNIQUE INDEX</xsl:when>
       <xsl:when test="$IDListNode='FOREIGN_KEY'">FOREIGN KEY</xsl:when>
      </xsl:choose>
      <xsl:text>) COLUMNS </xsl:text>
     </xsl:element>
    </xsl:element>
    </xsl:element>
   </xsl:when>
  </xsl:choose>
 </xsl:template>
 <xsl:template name="AlterMiscProperties">
  <xsl:param name="ObjectNode" select="''"/>
  <xsl:param name="PropertyNode" select="''"/>
  <!-- *******************************************************************
Template: AlterMiscProperties 
Parameters:
 ObejctNode - <TABLE> 
 PropertyNode - <TABLE_PROPERTIES> i.e., parent of ROW_MOVEMENT, CACHE, and PARALLEL
******************************************************************** -->
  <!-- Cache -->
  <xsl:call-template name="AlterRowMovement">
   <xsl:with-param name="ObjectNode" select="$ObjectNode"/>
   <xsl:with-param name="PropertyNode" select="$PropertyNode"/>
   <xsl:with-param name="ObjType">TABLE</xsl:with-param>
  </xsl:call-template>
  <!-- Cache -->
  <xsl:call-template name="AlterCache">
   <xsl:with-param name="ObjectNode" select="$ObjectNode"/>
   <xsl:with-param name="ParentNode" select="$PropertyNode"/>
   <xsl:with-param name="ObjType">TABLE</xsl:with-param>
   <xsl:with-param name="OnTable"> </xsl:with-param>
  </xsl:call-template>
  <!-- Parallel -->
  <xsl:call-template name="AlterParallel">
   <xsl:with-param name="ObjectNode" select="$ObjectNode"/>
   <xsl:with-param name="ParentNode" select="$PropertyNode"/>
   <xsl:with-param name="ObjType">TABLE</xsl:with-param>
   <xsl:with-param name="OnTable"> </xsl:with-param>
  </xsl:call-template>
 </xsl:template>
 <xsl:template name="AlterRowMovement">
  <xsl:param name="ObjectNode" select="''"/>
  <xsl:param name="PropertyNode" select="''"/>
  <xsl:param name="ObjType" select="''"/>
  <!-- *******************************************************************
Template: AlterRowMovement
Description: This template determines if there was a change in the ROW_MOVEMENT element
Parameters:
 ObjectNode - object node e.g., <TABLE>
 PropertyNode - Parent of the ROW_MOVEMENT node
ObjType - object type containing the ROW_MOVEMENT directive 
******************************************************************** -->
  <xsl:if test="$PropertyNode/sxml:ROW_MOVEMENT/@src or 
           ($PropertyNode/@src and $PropertyNode/sxml:ROW_MOVEMENT)">
   <xsl:element name="ALTER_LIST_ITEM">
    <xsl:call-template name="DoAlterRowMovement">
     <xsl:with-param name="ObjectNode" select="$ObjectNode"/>
     <xsl:with-param name="PropertyNode" select="$PropertyNode"/>
     <xsl:with-param name="ObjType" select="$ObjType"/>
     <xsl:with-param name="Action">PARSE</xsl:with-param>
    </xsl:call-template>
    <xsl:call-template name="DoAlterRowMovement">
     <xsl:with-param name="ObjectNode" select="$ObjectNode"/>
     <xsl:with-param name="PropertyNode" select="$PropertyNode"/>
     <xsl:with-param name="ObjType" select="$ObjType "/>
     <xsl:with-param name="Action">SQL</xsl:with-param>
    </xsl:call-template>
   </xsl:element>
  </xsl:if>
 </xsl:template>
 <xsl:template name="DoAlterRowMovement">
  <xsl:param name="ObjectNode" select="''"/>
  <xsl:param name="PropertyNode" select="''"/>
  <xsl:param name="ObjType" select="''"/>
  <xsl:param name="Action" select="''"/>
  <!-- *******************************************************************
Template: DoAlterRowMovement
Parameters:
 ObjectNode - e.g., <TABLE>
 PropertyNode - <TABLE_PROPERTIES> i.e., parent of ROW_MOVEMENT
 ObjType - object type c
 Action - PARSE or SQL
******************************************************************** -->
  <xsl:choose>
   <xsl:when test="$Action='PARSE' and ($PRS_NAME=1 or 
                                        $PRS_CLAUSE_TYPE=1 or
                                        $PRS_COLUMN_ATTRIBUTE=1 or
                                        $PRS_ALTERABLE=1 or
                                        $PRS_XPATH=1)">
    <xsl:element name="PARSE_LIST">
     <xsl:call-template name="AddXPathParseItem">
      <xsl:with-param name="Node" select="$PropertyNode"/>
     </xsl:call-template>
     <xsl:call-template name="AddParseItem">
      <xsl:with-param name="ParseIt" select="$PRS_NAME"/>
      <xsl:with-param name="Item">NAME</xsl:with-param>
      <xsl:with-param name="Value1" select="$ObjectNode/sxml:NAME"/>
     </xsl:call-template>
     <xsl:call-template name="AddParseItem">
      <xsl:with-param name="ParseIt" select="$PRS_CLAUSE_TYPE"/>
      <xsl:with-param name="Item">CLAUSE_TYPE</xsl:with-param>
      <xsl:with-param name="Value1">ALTER_TABLE_PROPERTIES</xsl:with-param>
     </xsl:call-template>
     <xsl:call-template name="AddParseItem">
      <xsl:with-param name="ParseIt" select="$PRS_COLUMN_ATTRIBUTE"/>
      <xsl:with-param name="Item">TABLE_PROPERTIES</xsl:with-param>
      <xsl:with-param name="Value1">ROW_MOVEMENT</xsl:with-param>
     </xsl:call-template>
    </xsl:element>
   </xsl:when>
   <xsl:when test="$Action='SQL'">
    <xsl:element name="SQL_LIST">
     <xsl:element name="SQL_LIST_ITEM">
      <xsl:element name="TEXT">
       <xsl:text>ALTER </xsl:text>
       <xsl:value-of select="$ObjType"/>
       <xsl:text> </xsl:text>
      <xsl:call-template name="SchemaName">
        <xsl:with-param name="ParentNode" select="$ObjectNode"/>
      </xsl:call-template>
      <xsl:choose>
        <xsl:when test="$PropertyNode/@src='2' or $PropertyNode/sxml:ROW_MOVEMENT/@src='2'">
         <xsl:if test="$PropertyNode/sxml:ROW_MOVEMENT"> ENABLE ROW MOVEMENT</xsl:if>
       </xsl:when>
        <xsl:when test="$PropertyNode/@src='1' or $PropertyNode/sxml:ROW_MOVEMENT/@src='1'">
         <xsl:if test="$PropertyNode/sxml:ROW_MOVEMENT"> DISABLE ROW MOVEMENT</xsl:if>
       </xsl:when>
       <xsl:otherwise/>
      </xsl:choose>
      </xsl:element>
     </xsl:element>
    </xsl:element>
   </xsl:when>
  </xsl:choose>
 </xsl:template>
 <xsl:template name="AlterCache">
  <xsl:param name="ObjectNode" select="''"/>
  <xsl:param name="ParentNode" select="''"/>
  <xsl:param name="ObjType" select="''"/>
  <xsl:param name="OnTable" select="''"/>
  <!-- *******************************************************************
Template: AlterCache
Description: This template determines if there was a change in the CACHE element
                    and then call DoAlterCache to generate SQL_LIST
Parameters:
 ObjectNode - <TABLE> 
 ParentNode -  Parent of the CACHE node e.g., <TABLE_PROPERTIES>
 ObjType - object type containing the CACHE directive (e.g., MATERIALIZED VIEW LOG)
 OnTable - Materialized View Logs require the ON_TABLE node for identifying the objname
******************************************************************** -->
  <xsl:if test="$ParentNode/sxml:CACHE/@src or 
           ($ParentNode/@src and $ParentNode/sxml:CACHE)">
   <xsl:element name="ALTER_LIST_ITEM">
    <xsl:call-template name="DoAlterCache">
     <xsl:with-param name="ObjectNode" select="$ObjectNode"/>
     <xsl:with-param name="ParentNode" select="$ParentNode"/>
     <xsl:with-param name="ObjType" select="$ObjType"/>
     <xsl:with-param name="OnTable" select="$OnTable"/>
     <xsl:with-param name="Action">PARSE</xsl:with-param>
    </xsl:call-template>
    <xsl:call-template name="DoAlterCache">
     <xsl:with-param name="ObjectNode" select="$ObjectNode"/>
     <xsl:with-param name="ParentNode" select="$ParentNode"/>
     <xsl:with-param name="ObjType" select="$ObjType"/>
     <xsl:with-param name="OnTable" select="$OnTable"/>
     <xsl:with-param name="Action">SQL</xsl:with-param>
    </xsl:call-template>
   </xsl:element>
  </xsl:if>
 </xsl:template>
 <xsl:template name="DoAlterCache">
  <xsl:param name="ObjectNode" select="''"/>
  <xsl:param name="ParentNode" select="''"/>
  <xsl:param name="ObjType" select="''"/>
  <xsl:param name="OnTable" select="''"/>
  <xsl:param name="Action" select="''"/>
  <!-- *******************************************************************
Template: DoAlterCache
Parameters:
 ObjectNode - <TABLE>
 ParentNode - parent of <CACHE>   e.g., <TABLE_PROPERTIES>
 ObjType - object type containing the CACHE directive (e.g., MATERIALIZED VIEW LOG)
 OnTable - the syntax for altering a MATERIALIZED VIEW LOG is slightly different in that
        it requires an ON clause to identified the table the mview is referencing.
 Action - PARSE or SQL
******************************************************************** -->
  <xsl:choose>
   <xsl:when test="$Action='PARSE' and ($PRS_NAME=1 or 
                                        $PRS_CLAUSE_TYPE=1 or
                                        $PRS_COLUMN_ATTRIBUTE=1 or
                                        $PRS_ALTERABLE=1 or
                                        $PRS_XPATH=1)">
    <xsl:element name="PARSE_LIST">
     <xsl:call-template name="AddXPathParseItem">
      <xsl:with-param name="Node" select="$ParentNode/sxml:CACHE"/>
     </xsl:call-template>
     <xsl:call-template name="AddParseItem">
      <xsl:with-param name="ParseIt" select="$PRS_NAME"/>
      <xsl:with-param name="Item">NAME</xsl:with-param>
      <xsl:with-param name="Value1" select="$ObjectNode/sxml:NAME"/>
     </xsl:call-template>
     <xsl:choose>
      <xsl:when test="$ObjType = 'TABLE'">
       <xsl:call-template name="AddParseItem">
      <xsl:with-param name="ParseIt" select="$PRS_CLAUSE_TYPE"/>
      <xsl:with-param name="Item">CLAUSE_TYPE</xsl:with-param>
        <xsl:with-param name="Value1">ALTER_TABLE_PROPERTIES</xsl:with-param>
       </xsl:call-template>
       <xsl:call-template name="AddParseItem">
        <xsl:with-param name="ParseIt" select="$PRS_COLUMN_ATTRIBUTE"/>
        <xsl:with-param name="Item">TABLE_PROPERTIES</xsl:with-param>
      <xsl:with-param name="Value1">CACHE</xsl:with-param>
     </xsl:call-template>
      </xsl:when>
      <xsl:otherwise>
       <xsl:call-template name="AddParseItem">
        <xsl:with-param name="ParseIt" select="$PRS_CLAUSE_TYPE"/>
        <xsl:with-param name="Item">CLAUSE_TYPE</xsl:with-param>
        <xsl:with-param name="Value1">CACHE</xsl:with-param>
       </xsl:call-template>
      </xsl:otherwise>
     </xsl:choose>
    </xsl:element>
   </xsl:when>
   <xsl:when test="$Action='SQL'">
    <xsl:element name="SQL_LIST">
     <xsl:element name="SQL_LIST_ITEM">
      <xsl:element name="TEXT">
      <xsl:text>ALTER </xsl:text>
      <xsl:value-of select="$ObjType"/>
       <xsl:text> </xsl:text>
      <xsl:choose>
       <xsl:when test="string-length($OnTable)!=0">
        <xsl:text> ON </xsl:text>
        <xsl:call-template name="SchemaName">
         <xsl:with-param name="ParentNode" select="$OnTable"/>
        </xsl:call-template>
         <xsl:text> </xsl:text>
       </xsl:when>
       <xsl:otherwise>
        <xsl:call-template name="SchemaName">
          <xsl:with-param name="ParentNode" select="$ObjectNode"/>
        </xsl:call-template>
       </xsl:otherwise>
      </xsl:choose>
      <xsl:choose>
       <xsl:when test="$ParentNode/sxml:CACHE/@src='1'">
         <xsl:text> NOCACHE</xsl:text>
       </xsl:when>
       <xsl:otherwise>
         <xsl:text> CACHE</xsl:text>
       </xsl:otherwise>
      </xsl:choose>
     </xsl:element>
    </xsl:element>
    </xsl:element>
   </xsl:when>
  </xsl:choose>
 </xsl:template>
 <xsl:template name="AlterParallel">
  <xsl:param name="ObjectNode" select="''"/>
  <xsl:param name="ParentNode" select="''"/>
  <xsl:param name="ObjType" select="''"/>
  <xsl:param name="OnTable" select="''"/>
  <!-- *******************************************************************
Template: AlterParallel
          This template determines if PARALLEL has been modified and if so,
          calls DoAlterParallel to generate the alters
Parameters:
 ObjectNode - <TABLE>
 ParentNode -  Parent of the PARALLEL or PARALLEL_DEGREE element  e.g., <TABLE_PROPERTIES>
 ObjType - e.g., 'TABLE'
 OnTable
******************************************************************** -->
  <xsl:if test="($ParentNode/@src='2' and 
                                           ($ParentNode/sxml:PARALLEL or $ParentNode/sxml:PARALLEL_DEGREE)) or 
                                           ($ParentNode/sxml:PARALLEL/@src or 
                      $ParentNode/sxml:PARALLEL/@src or
                      $ParentNode/sxml:PARALLEL/@value1 or
                      $ParentNode/sxml:PARALLEL_DEGREE/@src or
                      $ParentNode/sxml:PARALLEL_DEGREE/sxml:DEGREE/@value1 or
                      $ParentNode/sxml:PARALLEL_DEGREE/sxml:INSTANCES/@value1) ">
   <xsl:element name="ALTER_LIST_ITEM">
    <xsl:call-template name="DoAlterParallel">
     <xsl:with-param name="ObjectNode" select="$ObjectNode"/>
     <xsl:with-param name="ParentNode" select="$ParentNode"/>
     <xsl:with-param name="ObjType" select="$ObjType"/>
     <xsl:with-param name="Action">PARSE</xsl:with-param>
    </xsl:call-template>
    <xsl:call-template name="DoAlterParallel">
     <xsl:with-param name="ObjectNode" select="$ObjectNode"/>
     <xsl:with-param name="ParentNode" select="$ParentNode"/>
     <xsl:with-param name="ObjType" select="$ObjType"/>
     <xsl:with-param name="OnTable" select="$OnTable"/>
     <xsl:with-param name="Action">SQL</xsl:with-param>
    </xsl:call-template>
   </xsl:element>
  </xsl:if>
 </xsl:template>
 <xsl:template name="DoAlterParallel">
  <xsl:param name="ObjectNode" select="''"/>
  <xsl:param name="ParentNode" select="''"/>
  <xsl:param name="ObjType" select="''"/>
  <xsl:param name="OnTable" select="''"/>
  <xsl:param name="Action" select="''"/>
  <!-- *******************************************************************
Template: DoAlterParallel
          This template generates the alter parallel directives
Parameters:
 ObjectNode - <TABLE>
 ParentNode -  parent of PARALLEL e.g., <TABLE_PROPERTIES>
 ObjType - e.g. 'TABLE'
 OnTable - This is only used by MATERIALIZED VIEW LOG
 Action - PARSE | SQL 
******************************************************************** -->
  <xsl:choose>
   <xsl:when test="$Action='PARSE' and ($PRS_NAME=1 or 
                                        $PRS_CLAUSE_TYPE=1 or
                                        $PRS_COLUMN_ATTRIBUTE=1 or
                                        $PRS_ALTERABLE=1 or
                                        $PRS_XPATH=1)">
    <xsl:element name="PARSE_LIST">
     <xsl:call-template name="AddXPathParseItem">
      <xsl:with-param name="Node" select="$ParentNode/sxml:PARALLEL"/>
     </xsl:call-template>
     <xsl:call-template name="AddParseItem">
      <xsl:with-param name="ParseIt" select="$PRS_NAME"/>
      <xsl:with-param name="Item">NAME</xsl:with-param>
      <xsl:with-param name="Value1" select="$ObjectNode/sxml:NAME"/>
     </xsl:call-template>
     <xsl:choose>
      <xsl:when test="$ObjType = 'TABLE'">
       <xsl:call-template name="AddParseItem">
        <xsl:with-param name="ParseIt" select="$PRS_CLAUSE_TYPE"/>
        <xsl:with-param name="Item">CLAUSE_TYPE</xsl:with-param>
        <xsl:with-param name="Value1">ALTER_TABLE_PROPERTIES</xsl:with-param>
       </xsl:call-template>
       <xsl:call-template name="AddParseItem">
        <xsl:with-param name="ParseIt" select="$PRS_COLUMN_ATTRIBUTE"/>
        <xsl:with-param name="Item">TABLE_PROPERTIES</xsl:with-param>
        <xsl:with-param name="Value1">PARALLEL</xsl:with-param>
       </xsl:call-template>
      </xsl:when>
      <xsl:otherwise>
       <xsl:call-template name="AddParseItem">
        <xsl:with-param name="ParseIt" select="$PRS_CLAUSE_TYPE"/>
        <xsl:with-param name="Item">CLAUSE_TYPE</xsl:with-param>
        <xsl:with-param name="Value1">PARALLEL</xsl:with-param>
       </xsl:call-template>
      </xsl:otherwise>
    </xsl:choose>
    </xsl:element>
   </xsl:when>
   <xsl:when test="$Action='SQL'">
    <xsl:element name="SQL_LIST">
     <xsl:element name="SQL_LIST_ITEM">
      <xsl:element name="TEXT">
      <xsl:text>ALTER </xsl:text>
      <xsl:value-of select="$ObjType"/>
       <xsl:text> </xsl:text>
      <xsl:choose>
       <xsl:when test="string-length($OnTable)!=0">
        <xsl:text> ON </xsl:text>
        <xsl:call-template name="SchemaName">
         <xsl:with-param name="ParentNode" select="$OnTable"/>
        </xsl:call-template>
         <xsl:text> </xsl:text>
       </xsl:when>
       <xsl:otherwise>
        <xsl:call-template name="SchemaName">
          <xsl:with-param name="ParentNode" select="$ObjectNode"/>
        </xsl:call-template>
       </xsl:otherwise>
      </xsl:choose>
       <!-- There are 2 flavors of PARALLEL syntax:
 PARALLEL [integer]  (old syntax) 
| PARALLEL (DEGREE int INSTANCES int)
Note: it is possible for each to be present in any given diff doc. 
-->
      <xsl:choose>
        <xsl:when test="($ParentNode/@src='1' and 
                                    ($ParentNode/sxml:PARALLEL_DEGREE or
                                     $ParentNode/sxml:PARALLEL)) or
                                   ($ParentNode/sxml:PARALLEL_DEGREE/@src='1')">
         <xsl:text> NOPARALLEL</xsl:text>
        </xsl:when>
        <xsl:when test="($ParentNode/@src='2' and 
                                    ($ParentNode/sxml:PARALLEL_DEGREE)) or
                                   ($ParentNode/sxml:PARALLEL_DEGREE/@src='2')">
         <xsl:text> PARALLEL (</xsl:text>
         <!-- Generate PARALLEL integer if appropriate-->
         <xsl:text>DEGREE </xsl:text>
         <xsl:value-of select="$ParentNode/sxml:PARALLEL_DEGREE/sxml:DEGREE"/>
         <xsl:text> INSTANCES </xsl:text>
         <xsl:value-of select="$ParentNode/sxml:PARALLEL_DEGREE/sxml:INSTANCES"/>
         <xsl:text>)</xsl:text>
       </xsl:when>
        <xsl:when test="($ParentNode/@src='2' and 
                                    ($ParentNode/sxml:PARALLEL)) or
                                   ($ParentNode/sxml:PARALLEL/@src='2') or
                                   ($ParentNode/sxml:PARALLEL/@value1)">
         <xsl:text> PARALLEL </xsl:text>
         <!-- Generate PARALLEL integer if appropriate-->
         <xsl:value-of select="$ParentNode/sxml:PARALLEL"/>
        </xsl:when>
        <xsl:when test="$ParentNode/sxml:PARALLEL/@src='1'">
         <xsl:text> NOPARALLEL</xsl:text>
        </xsl:when>
       </xsl:choose>
      </xsl:element>
     </xsl:element>
    </xsl:element>
       </xsl:when>
      </xsl:choose>
 </xsl:template>
 <xsl:template name="AlterFlashbackArchive">
  <xsl:param name="ParentNode" select="''"/>
  <xsl:param name="TableNode" select="''"/>
  <!-- *******************************************************************
Template: AlterFlashbackArchive
Parameters:
 ParentNode - 
******************************************************************** -->
  <xsl:if test="($ParentNode/@src and $ParentNode/sxml:FLASHBACK_ARCHIVE) or
    $ParentNode/sxml:FLASHBACK_ARCHIVE/@src or
    $ParentNode/sxml:FLASHBACK_ARCHIVE/@value1">
   <xsl:element name="ALTER_LIST_ITEM">
    <xsl:call-template name="DoAlterFlashbackArchive">
     <xsl:with-param name="TableNode" select="$TableNode"/>
     <xsl:with-param name="ParentNode" select="$ParentNode"/>
     <xsl:with-param name="Action">PARSE</xsl:with-param>
    </xsl:call-template>
    <xsl:call-template name="DoAlterFlashbackArchive">
     <xsl:with-param name="TableNode" select="$TableNode"/>
     <xsl:with-param name="ParentNode" select="$ParentNode"/>
     <xsl:with-param name="Action">SQL</xsl:with-param>
    </xsl:call-template>
   </xsl:element>
  </xsl:if>
 </xsl:template>
 <xsl:template name="DoAlterFlashbackArchive">
  <xsl:param name="ParentNode" select="''"/>
  <xsl:param name="TableNode" select="''"/>
  <xsl:param name="Action" select="''"/>
  <!-- *******************************************************************
Template: DoAlterFlashbackArchive
Parameters:
 ParentNode - 
******************************************************************** -->
  <xsl:choose>
   <xsl:when test="$Action='PARSE' and ($PRS_NAME=1 or 
                                        $PRS_CLAUSE_TYPE=1 or
                                        $PRS_COLUMN_ATTRIBUTE=1 or
                                        $PRS_ALTERABLE=1 or
                                        $PRS_XPATH=1)">
    <xsl:element name="PARSE_LIST">
     <xsl:call-template name="AddXPathParseItem">
      <xsl:with-param name="Node" select="$ParentNode"/>
     </xsl:call-template>
     <xsl:call-template name="AddParseItem">
      <xsl:with-param name="ParseIt" select="$PRS_NAME"/>
      <xsl:with-param name="Item">NAME</xsl:with-param>
      <xsl:with-param name="Value1" select="$TableNode/sxml:NAME"/>
     </xsl:call-template>
     <xsl:call-template name="AddParseItem">
      <xsl:with-param name="ParseIt" select="$PRS_CLAUSE_TYPE"/>
      <xsl:with-param name="Item">CLAUSE_TYPE</xsl:with-param>
      <xsl:with-param name="Value1">ALTER_TABLE_PROPERTIES</xsl:with-param>
     </xsl:call-template>
     <xsl:call-template name="AddParseItem">
      <xsl:with-param name="ParseIt" select="$PRS_COLUMN_ATTRIBUTE"/>
      <xsl:with-param name="Item">TABLE_PROPERTIES</xsl:with-param>
      <xsl:with-param name="Value1">FLASHBACK_ARCHIVE</xsl:with-param>
     </xsl:call-template>
    </xsl:element>
   </xsl:when>
   <xsl:when test="$Action='SQL'">
    <xsl:element name="SQL_LIST">
     <xsl:choose>
      <xsl:when test="$ParentNode/@src='2' or $ParentNode/sxml:FLASHBACK_ARCHIVE/@src='2'">
       <xsl:element name="SQL_LIST_ITEM">
        <xsl:element name="TEXT">
         <xsl:text>ALTER TABLE </xsl:text>
         <xsl:call-template name="SchemaName">
          <xsl:with-param name="ParentNode" select="$TableNode"/>
         </xsl:call-template>
         <xsl:apply-templates select="$ParentNode/sxml:FLASHBACK_ARCHIVE"/>
        </xsl:element>
       </xsl:element>
      </xsl:when>
      <xsl:when test="$ParentNode/@src='1' or $ParentNode/sxml:FLASHBACK_ARCHIVE/@src='1'">
       <xsl:if test="$ParentNode/sxml:FLASHBACK_ARCHIVE">
        <xsl:element name="SQL_LIST_ITEM">
         <xsl:element name="TEXT">
          <xsl:text>ALTER TABLE </xsl:text>
          <xsl:call-template name="SchemaName">
           <xsl:with-param name="ParentNode" select="$TableNode"/>
          </xsl:call-template>
          <xsl:text> NO FLASHBACK ARCHIVE</xsl:text>
         </xsl:element>
        </xsl:element>
        <xsl:if test="$LRG!=0">
         <xsl:element name="SQL_LIST_ITEM">
          <xsl:element name="TEXT">
           <xsl:text> begin dbms_lock.sleep(20);  end; </xsl:text>
     </xsl:element>
    </xsl:element>
        </xsl:if>
       </xsl:if>
      </xsl:when>
      <!-- to change flashback archive, first set no archive, then set archive-->
      <xsl:when test="$ParentNode/sxml:FLASHBACK_ARCHIVE/@value1">
       <xsl:element name="SQL_LIST_ITEM">
        <xsl:element name="TEXT">
         <xsl:text>ALTER TABLE </xsl:text>
         <xsl:call-template name="SchemaName">
          <xsl:with-param name="ParentNode" select="$TableNode"/>
         </xsl:call-template>
         <xsl:text> NO FLASHBACK ARCHIVE</xsl:text>
        </xsl:element>
       </xsl:element>
       <xsl:if test="$LRG!=0">
        <xsl:element name="SQL_LIST_ITEM">
         <xsl:element name="TEXT">
          <xsl:text> begin dbms_lock.sleep(20);  end; </xsl:text>
         </xsl:element>
        </xsl:element>
       </xsl:if>
       <xsl:element name="SQL_LIST_ITEM">
        <xsl:element name="TEXT">
         <xsl:text>ALTER TABLE </xsl:text>
         <xsl:call-template name="SchemaName">
          <xsl:with-param name="ParentNode" select="$TableNode"/>
         </xsl:call-template>
         <xsl:apply-templates select="$ParentNode/sxml:FLASHBACK_ARCHIVE"/>
        </xsl:element>
       </xsl:element>
      </xsl:when>
     </xsl:choose>
    </xsl:element>
   </xsl:when>
 </xsl:choose>
 </xsl:template>
 <xsl:template name="AlterIOT">
  <xsl:param name="ParentNode" select="''"/>
  <xsl:param name="TableNode" select="''"/>
  <xsl:param name="ObjType" select="'TABLE'"/>
  <!-- *******************************************************************
Template: AlterIOT 
Parameters:
 ParentNode - sxml:RELATIONAL_TABLE
******************************************************************** -->
  <!-- index_org_table_clause -->
  <xsl:if test="$ParentNode/sxml:PHYSICAL_PROPERTIES/sxml:INDEX_ORGANIZED_TABLE">
   <xsl:call-template name="IndexOrg">
    <xsl:with-param name="TableNode" select="$TableNode"/>
    <xsl:with-param name="ParentNode" select="$ParentNode/sxml:PHYSICAL_PROPERTIES/sxml:INDEX_ORGANIZED_TABLE"/>
    <xsl:with-param name="ObjType" select="$ObjType"/>
   </xsl:call-template>
  </xsl:if>
  <!-- alter_overflow_clause -->
  <xsl:choose>
   <!-- range partition-->
   <xsl:when test="$ParentNode/sxml:TABLE_PROPERTIES/sxml:RANGE_PARTITIONING">
    <xsl:call-template name="IndexOrg">
     <xsl:with-param name="TableNode" select="$TableNode"/>
     <xsl:with-param name="ParentNode" select="$ParentNode/sxml:TABLE_PROPERTIES/sxml:RANGE_PARTITIONING/sxml:DEFAULT_PHYSICAL_PROPERTIES/sxml:INDEX_ORGANIZED_TABLE"/>
     <xsl:with-param name="ListNode" select="$ParentNode/sxml:TABLE_PROPERTIES/sxml:RANGE_PARTITIONING/sxml:PARTITION_LIST"/>
    <xsl:with-param name="ObjType" select="$ObjType"/>
    </xsl:call-template>
   </xsl:when>
   <!-- Hash partition-->
   <xsl:when test="$ParentNode/sxml:TABLE_PROPERTIES/sxml:HASH_PARTITIONING">
    <xsl:call-template name="IndexOrg">
     <xsl:with-param name="TableNode" select="$TableNode"/>
     <xsl:with-param name="ParentNode" select="$ParentNode/sxml:TABLE_PROPERTIES/sxml:HASH_PARTITIONING/sxml:DEFAULT_PHYSICAL_PROPERTIES/sxml:INDEX_ORGANIZED_TABLE"/>
     <xsl:with-param name="ListNode" select="$ParentNode/sxml:TABLE_PROPERTIES/sxml:HASH_PARTITIONING/sxml:PARTITION_LIST"/>
    <xsl:with-param name="ObjType" select="$ObjType"/>
    </xsl:call-template>
   </xsl:when>
   <!-- List partition-->
   <xsl:when test="$ParentNode/sxml:TABLE_PROPERTIES/sxml:LIST_PARTITIONING">
    <xsl:call-template name="IndexOrg">
     <xsl:with-param name="TableNode" select="$TableNode"/>
     <xsl:with-param name="ParentNode" select="$ParentNode/sxml:TABLE_PROPERTIES/sxml:LIST_PARTITIONING/sxml:DEFAULT_PHYSICAL_PROPERTIES/sxml:INDEX_ORGANIZED_TABLE"/>
     <xsl:with-param name="ListNode" select="$ParentNode/sxml:TABLE_PROPERTIES/sxml:LIST_PARTITIONING/sxml:PARTITION_LIST"/>
    <xsl:with-param name="ObjType" select="$ObjType"/>
    </xsl:call-template>
   </xsl:when>
   <xsl:otherwise/>
  </xsl:choose>
  <!-- alter_mapping_table_clause -->
  <!-- COALESCE -->
 </xsl:template>
 <xsl:template name="IndexOrg">
  <xsl:param name="TableNode" select="''"/>
  <xsl:param name="ParentNode" select="''"/>
  <xsl:param name="ListNode" select="''"/>
  <xsl:param name="ObjType" select="'TABLE'"/>
  <!-- *******************************************************************
Template: IndexOrg 
Parameters:
 ParentNode -Parent of sxml:INDEX_ORGANIZED_TABLE
 ListNote - parent of PARTITION_LIST
******************************************************************** -->
  <!-- mapping -->
  <xsl:call-template name="DoMapping">
   <xsl:with-param name="TableNode" select="$TableNode"/>
   <xsl:with-param name="ParentNode" select="$ParentNode"/>
   <xsl:with-param name="ObjType" select="$ObjType"/>
  </xsl:call-template>
  <!-- PCTTHRESHOLD -->
  <xsl:call-template name="DoPCTthreshold">
   <xsl:with-param name="TableNode" select="$TableNode"/>
   <xsl:with-param name="ParentNode" select="$ParentNode"/>
   <xsl:with-param name="ObjType" select="$ObjType"/>
  </xsl:call-template>
  <!-- key_compression -->
  <xsl:call-template name="DoKeyCompress">
   <xsl:with-param name="TableNode" select="$TableNode"/>
   <xsl:with-param name="ParentNode" select="$ParentNode"/>
   <xsl:with-param name="ObjType" select="$ObjType"/>
  </xsl:call-template>
  <!-- OVERFLOW -->
  <xsl:call-template name="DoOverFlow">
   <xsl:with-param name="TableNode" select="$TableNode"/>
   <xsl:with-param name="ParentNode" select="$ParentNode"/>
   <xsl:with-param name="ListNode" select="$ListNode"/>
   <xsl:with-param name="ObjType" select="$ObjType"/>
  </xsl:call-template>
 </xsl:template>
 <xsl:template name="DoMapping">
  <xsl:param name="ParentNode" select="''"/>
  <xsl:param name="TableNode" select="''"/>
  <xsl:param name="ObjType" select="'TABLE'"/>
  <!-- *******************************************************************
Template: DoMapping 
Parameters:
 ParentNode - sxml:INDEX_ORGANIZED_TABLE
******************************************************************** -->
  <xsl:if test="$ParentNode/sxml:MAPPING_TABLE/@src">
   <xsl:element name="ALTER_LIST_ITEM">
    <xsl:call-template name="Mapping">
     <xsl:with-param name="TableNode" select="$TableNode"/>
     <xsl:with-param name="ParentNode" select="$ParentNode"/>
     <xsl:with-param name="ObjType" select="$ObjType"/>
     <xsl:with-param name="Action">PARSE</xsl:with-param>
    </xsl:call-template>
    <xsl:call-template name="Mapping">
     <xsl:with-param name="TableNode" select="$TableNode"/>
     <xsl:with-param name="ParentNode" select="$ParentNode"/>
     <xsl:with-param name="ObjType" select="$ObjType"/>
     <xsl:with-param name="Action">SQL</xsl:with-param>
    </xsl:call-template>
   </xsl:element>
  </xsl:if>
 </xsl:template>
 <xsl:template name="Mapping">
  <xsl:param name="ParentNode" select="''"/>
  <xsl:param name="TableNode" select="''"/>
  <xsl:param name="ObjType" select="'TABLE'"/>
  <xsl:param name="Action" select="''"/>
  <!-- *******************************************************************
Template: Mapping 
Parameters:
 ParentNode - sxml:INDEX_ORGANIZED_TABLE
******************************************************************** -->
  <xsl:choose>
   <xsl:when test="$Action='PARSE' and ($PRS_NAME=1 or 
                                        $PRS_CLAUSE_TYPE=1 or
                                        $PRS_COLUMN_ATTRIBUTE=1 or
                                        $PRS_ALTERABLE=1 or
                                        $PRS_XPATH=1)">
    <xsl:element name="PARSE_LIST">
     <xsl:call-template name="AddXPathParseItem">
      <xsl:with-param name="Node" select="$ParentNode"/>
     </xsl:call-template>
     <xsl:call-template name="AddParseItem">
      <xsl:with-param name="ParseIt" select="$PRS_NAME"/>
      <xsl:with-param name="Item">NAME</xsl:with-param>
      <xsl:with-param name="Value1" select="sxml:NAME"/>
     </xsl:call-template>
     <xsl:call-template name="AddParseItem">
      <xsl:with-param name="ParseIt" select="$PRS_CLAUSE_TYPE"/>
      <xsl:with-param name="Item">CLAUSE_TYPE</xsl:with-param>
      <xsl:with-param name="Value1">PHYSICAL_ATTRIBUTES</xsl:with-param>
      <xsl:with-param name="Value2">MAPPING</xsl:with-param>
     </xsl:call-template>
     <xsl:if test="$ObjType='MATERIALIZED_VIEW'">
      <xsl:call-template name="AddParseItem">
       <xsl:with-param name="ParseIt" select="$PRS_ALTERABLE"/>
       <xsl:with-param name="Item">NOT_ALTERABLE</xsl:with-param>
       <xsl:with-param name="Value1">MAPPING</xsl:with-param>
      </xsl:call-template>
     </xsl:if>
    </xsl:element>
   </xsl:when>
   <xsl:when test="$Action='SQL'">
    <xsl:element name="SQL_LIST">
     <xsl:element name="SQL_LIST_ITEM">
      <xsl:element name="TEXT">
     <xsl:choose>
      <xsl:when test="$ObjType='TABLE'">
       <xsl:text>ALTER TABLE </xsl:text>
       <xsl:call-template name="SchemaName">
        <xsl:with-param name="ParentNode" select="$TableNode"/>
       </xsl:call-template>
       <xsl:choose>
        <xsl:when test="$ParentNode/sxml:MAPPING_TABLE/@src='1'">
         <xsl:text> MOVE NOMAPPING </xsl:text>
        </xsl:when>
        <xsl:when test="$ParentNode/sxml:MAPPING_TABLE/@src='2'">
         <xsl:text> MOVE MAPPING TABLE </xsl:text>
        </xsl:when>
        <xsl:otherwise/>
       </xsl:choose>
      </xsl:when>
      <xsl:when test="$ObjType='MATERIALIZED_VIEW'">
       <xsl:text>-- cannot alter MAPPING in Index-Oranized MATERIALIZED VIEW </xsl:text>
      </xsl:when>
     </xsl:choose>
     </xsl:element>
    </xsl:element>
    </xsl:element>
   </xsl:when>
  </xsl:choose>
 </xsl:template>
 <xsl:template name="DoPCTthreshold">
  <xsl:param name="ParentNode" select="''"/>
  <xsl:param name="TableNode" select="''"/>
  <xsl:param name="ObjType" select="'TABLE'"/>
  <!-- *******************************************************************
Template: DoPCTthreshold 
Parameters:
 ParentNode - sxml:INDEX_ORGANIZED_TABLE
******************************************************************** -->
  <xsl:if test="$ParentNode/sxml:PCTTHRESHOLD/@src='2' 
		     or $ParentNode/sxml:PCTTHRESHOLD/@value1">
   <xsl:element name="ALTER_LIST_ITEM">
    <xsl:call-template name="PCTthreshold">
     <xsl:with-param name="TableNode" select="$TableNode"/>
     <xsl:with-param name="ParentNode" select="$ParentNode"/>
     <xsl:with-param name="ObjType" select="$ObjType"/>
     <xsl:with-param name="Action">PARSE</xsl:with-param>
    </xsl:call-template>
    <xsl:call-template name="PCTthreshold">
     <xsl:with-param name="TableNode" select="$TableNode"/>
     <xsl:with-param name="ParentNode" select="$ParentNode"/>
     <xsl:with-param name="ObjType" select="$ObjType"/>
     <xsl:with-param name="Action">SQL</xsl:with-param>
    </xsl:call-template>
   </xsl:element>
  </xsl:if>
 </xsl:template>
 <xsl:template name="PCTthreshold">
  <xsl:param name="ParentNode" select="''"/>
  <xsl:param name="TableNode" select="''"/>
  <xsl:param name="ObjType" select="'TABLE'"/>
  <xsl:param name="Action" select="''"/>
  <!-- *******************************************************************
Template: PCTthreshold 
Parameters:
 ParentNode - sxml:INDEX_ORGANIZED_TABLE
******************************************************************** -->
  <xsl:choose>
   <xsl:when test="$Action='PARSE' and ($PRS_NAME=1 or 
                                        $PRS_CLAUSE_TYPE=1 or
                                        $PRS_COLUMN_ATTRIBUTE=1 or
                                        $PRS_ALTERABLE=1 or
                                        $PRS_XPATH=1)">
    <xsl:element name="PARSE_LIST">
     <xsl:call-template name="AddXPathParseItem">
      <xsl:with-param name="Node" select="$ParentNode"/>
     </xsl:call-template>
     <xsl:call-template name="AddParseItem">
      <xsl:with-param name="ParseIt" select="$PRS_NAME"/>
      <xsl:with-param name="Item">NAME</xsl:with-param>
      <xsl:with-param name="Value1" select="$TableNode/sxml:NAME"/>
     </xsl:call-template>
     <xsl:call-template name="AddParseItem">
      <xsl:with-param name="ParseIt" select="$PRS_CLAUSE_TYPE"/>
      <xsl:with-param name="Item">CLAUSE_TYPE</xsl:with-param>
      <xsl:with-param name="Value1">PHYSICAL_ATTRIBUTES</xsl:with-param>
      <xsl:with-param name="Value2">PCTTHRESHOLD</xsl:with-param>
     </xsl:call-template>
    </xsl:element>
   </xsl:when>
   <xsl:when test="$Action='SQL'">
    <xsl:element name="SQL_LIST">
     <xsl:element name="SQL_LIST_ITEM">
      <xsl:element name="TEXT">
      <xsl:choose>
       <xsl:when test="$ObjType='TABLE'">
        <xsl:text>ALTER TABLE </xsl:text>
       </xsl:when>
       <xsl:when test="$ObjType='MATERIALIZED_VIEW'">
        <xsl:text>ALTER MATERIALIZED VIEW </xsl:text>
       </xsl:when>
      </xsl:choose>
      <xsl:call-template name="SchemaName">
       <xsl:with-param name="ParentNode" select="$TableNode"/>
      </xsl:call-template>
      <xsl:choose>
       <xsl:when test="$ParentNode/sxml:PCTTHRESHOLD/@src='1'">
        <xsl:text> PCTTHRESHOLD 0  </xsl:text>
        <!-- assume 0 is default value -->
       </xsl:when>
       <xsl:when test="$ParentNode/sxml:PCTTHRESHOLD/@src='2' 
	     or $ParentNode/sxml:PCTTHRESHOLD/@value1">
        <xsl:text> PCTTHRESHOLD </xsl:text>
        <xsl:value-of select="$ParentNode/sxml:PCTTHRESHOLD"/>
       </xsl:when>
       <xsl:otherwise/>
      </xsl:choose>
     </xsl:element>
    </xsl:element>
    </xsl:element>
   </xsl:when>
  </xsl:choose>
 </xsl:template>
 <xsl:template name="DoKeyCompress">
  <xsl:param name="ParentNode" select="''"/>
  <xsl:param name="TableNode" select="''"/>
  <xsl:param name="ObjType" select="'TABLE'"/>
  <!--*******************************************************************
Template: DoKeyCompress
Parameters:
 ParentNode - sxml:INDEX_ORGANIZED_TABLE
******************************************************************** -->
  <xsl:if test="$ParentNode/sxml:KEYCOMPRESS/@src!='1'
		     or $ParentNode/sxml:KEYCOMPRESS/@value1">
   <xsl:element name="ALTER_LIST_ITEM">
    <xsl:call-template name="KeyCompress">
     <xsl:with-param name="TableNode" select="$TableNode"/>
     <xsl:with-param name="ParentNode" select="$ParentNode"/>
     <xsl:with-param name="Objtype" select="$ObjType"/>
     <xsl:with-param name="Action">PARSE</xsl:with-param>
    </xsl:call-template>
    <xsl:call-template name="KeyCompress">
     <xsl:with-param name="TableNode" select="$TableNode"/>
     <xsl:with-param name="ParentNode" select="$ParentNode"/>
     <xsl:with-param name="ObjType" select="$ObjType"/>
     <xsl:with-param name="Action">SQL</xsl:with-param>
    </xsl:call-template>
   </xsl:element>
  </xsl:if>
 </xsl:template>
 <xsl:template name="KeyCompress">
  <xsl:param name="ParentNode" select="''"/>
  <xsl:param name="TableNode" select="''"/>
  <xsl:param name="ObjType" select="'TABLE'"/>
  <xsl:param name="Action" select="''"/>
  <!-- *******************************************************************
Template: KeyCompress
Parameters:
 ParentNode - sxml:INDEX_ORGANIZED_TABLE
******************************************************************** -->
  <xsl:choose>
   <xsl:when test="$Action='PARSE' and ($PRS_NAME=1 or 
                                        $PRS_CLAUSE_TYPE=1 or
                                        $PRS_COLUMN_ATTRIBUTE=1 or
                                        $PRS_ALTERABLE=1 or
                                        $PRS_XPATH=1)">
    <xsl:element name="PARSE_LIST">
     <xsl:call-template name="AddXPathParseItem">
      <xsl:with-param name="Node" select="$ParentNode"/>
     </xsl:call-template>
     <xsl:call-template name="AddParseItem">
      <xsl:with-param name="ParseIt" select="$PRS_NAME"/>
      <xsl:with-param name="Item">NAME</xsl:with-param>
      <xsl:with-param name="Value1" select="$TableNode/sxml:NAME"/>
     </xsl:call-template>
     <xsl:call-template name="AddParseItem">
      <xsl:with-param name="ParseIt" select="$PRS_CLAUSE_TYPE"/>
      <xsl:with-param name="Item">CLAUSE_TYPE</xsl:with-param>
      <xsl:with-param name="Value1">PHYSICAL_ATTRIBUTES</xsl:with-param>
      <xsl:with-param name="Value2">KEYCOMPRESS</xsl:with-param>
     </xsl:call-template>
     <xsl:if test="$ObjType='MATERIALIZED_VIEW'">
      <xsl:call-template name="AddParseItem">
      <xsl:with-param name="ParseIt" select="$PRS_ALTERABLE"/>
       <xsl:with-param name="Item">NOT_ALTERABLE</xsl:with-param>
       <xsl:with-param name="Value1">KEYCOMPRESS</xsl:with-param>
      </xsl:call-template>
     </xsl:if>
    </xsl:element>
   </xsl:when>
   <xsl:when test="$Action='SQL'">
    <xsl:element name="SQL_LIST">
     <xsl:element name="SQL_LIST_ITEM">
      <xsl:element name="TEXT">
      <xsl:choose>
       <xsl:when test="$ObjType='TABLE'">
        <xsl:text>ALTER TABLE </xsl:text>
        <xsl:call-template name="SchemaName">
         <xsl:with-param name="ParentNode" select="$TableNode"/>
        </xsl:call-template>
         <xsl:call-template name="AlterKeyCompress">
         <xsl:with-param name="ParentNode" select="$ParentNode"/>
        </xsl:call-template>
       </xsl:when>
       <xsl:when test="$ObjType='MATERIALIZED_VIEW'">
        <xsl:text>-- can not alter COMPRESS in index-organized ALTER MATERIALIZED VIEW </xsl:text>
       </xsl:when>
      </xsl:choose>
     </xsl:element>
    </xsl:element>
    </xsl:element>
   </xsl:when>
  </xsl:choose>
 </xsl:template>
 <xsl:template name="AlterKeyCompress">
  <xsl:param name="ParentNode" select="''"/>
  <!-- *******************************************************************
Template: AlterKeyCompress - index key compression
Parameters:
 ParentNode -  sxml:INDEX_ORGANIZED_TABLE
******************************************************************** -->
  <xsl:choose>
   <xsl:when test="$ParentNode/sxml:KEYCOMPRESS[@value1] or $ParentNode/sxml:KEYCOMPRESS/@src='2'">
    <xsl:choose>
     <xsl:when test="$ParentNode/sxml:KEYCOMPRESS='N'"> NOCOMPRESS </xsl:when>
     <xsl:otherwise>
      <xsl:text> MOVE COMPRESS </xsl:text>
      <xsl:value-of select="$ParentNode/sxml:KEYCOMPRESS"/>
     </xsl:otherwise>
    </xsl:choose>
   </xsl:when>
   <xsl:when test="$ParentNode/sxml:KEYCOMPRESS/@src='1'"> NOCOMPRESS </xsl:when>
  </xsl:choose>
 </xsl:template>
 <xsl:template name="DoOverFlow">
  <xsl:param name="ParentNode" select="''"/>
  <xsl:param name="TableNode" select="''"/>
  <xsl:param name="ListNode" select="''"/>
  <xsl:param name="ObjType" select="'TABLE'"/>
  <!-- *******************************************************************
Template: DoOverFlow 
Parameters:
 ParentNode - :INDEX_ORGANIZED_TABLE 
******************************************************************** -->
  <xsl:if test="$ParentNode/sxml:OVERFLOW/@src or
   $ParentNode/sxml:OVERFLOW/sxml:SEGMENT_ATTRIBUTES//@value1">
   <xsl:element name="ALTER_LIST_ITEM">
    <xsl:call-template name="OverFlow">
     <xsl:with-param name="TableNode" select="$TableNode"/>
     <xsl:with-param name="ParentNode" select="$ParentNode"/>
     <xsl:with-param name="ListNode" select="$ListNode"/>
     <xsl:with-param name="ObjType" select="$ObjType"/>
     <xsl:with-param name="DoAll">
      <xsl:choose>
       <xsl:when test="$ParentNode/sxml:OVERFLOW/@src='1'">DROP</xsl:when>
       <xsl:when test="$ParentNode/sxml:OVERFLOW/@src='2'">ADD</xsl:when>
      </xsl:choose>
     </xsl:with-param>
     <xsl:with-param name="Action">PARSE</xsl:with-param>
    </xsl:call-template>
    <xsl:call-template name="OverFlow">
     <xsl:with-param name="TableNode" select="$TableNode"/>
     <xsl:with-param name="ParentNode" select="$ParentNode"/>
     <xsl:with-param name="ListNode" select="$ListNode"/>
     <xsl:with-param name="ObjType" select="$ObjType"/>
     <xsl:with-param name="DoAll">
      <xsl:choose>
       <xsl:when test="$ParentNode/sxml:OVERFLOW/@src='1'">DROP</xsl:when>
       <xsl:when test="$ParentNode/sxml:OVERFLOW/@src='2'">ADD</xsl:when>
      </xsl:choose>
     </xsl:with-param>
     <xsl:with-param name="Action">SQL</xsl:with-param>
    </xsl:call-template>
   </xsl:element>
  </xsl:if>
 </xsl:template>
 <xsl:template name="OverFlow">
  <xsl:param name="ParentNode" select="''"/>
  <xsl:param name="TableNode" select="''"/>
  <xsl:param name="ListNode" select="''"/>
  <xsl:param name="DoAll" select="''"/>
  <xsl:param name="ObjType" select="'TABLE'"/>
  <xsl:param name="Action" select="''"/>
  <!-- *******************************************************************
Template: OverFlow 
Parameters:
 ParentNode - :INDEX_ORGANIZED_TABLE 
******************************************************************** -->
  <xsl:choose>
   <xsl:when test="$Action='PARSE' and ($PRS_NAME=1 or 
                                        $PRS_CLAUSE_TYPE=1 or
					$PRS_CONSTRAINT_TYPE=1 or
					$PRS_CONSTRAINT_STATE=1 or
                                        $PRS_ALTERABLE=1 or
                                        $PRS_XPATH=1)">
    <xsl:element name="PARSE_LIST">
     <xsl:call-template name="AddXPathParseItem">
      <xsl:with-param name="Node" select="$ParentNode"/>
     </xsl:call-template>
     <xsl:call-template name="AddParseItem">
      <xsl:with-param name="ParseIt" select="$PRS_NAME"/>
      <xsl:with-param name="Item">NAME</xsl:with-param>
      <xsl:with-param name="Value1" select="$TableNode/sxml:NAME"/>
     </xsl:call-template>
     <xsl:call-template name="AddParseItem">
      <xsl:with-param name="ParseIt" select="$PRS_CLAUSE_TYPE"/>
      <xsl:with-param name="Item">CLAUSE_TYPE</xsl:with-param>
      <xsl:with-param name="Value1">
       <xsl:choose>
        <xsl:when test="$DoAll='DROP'"> CAN NOT DROP OVERFLOW</xsl:when>
        <xsl:when test="$DoAll='ADD'">ADD_OVERFLOW</xsl:when>
        <xsl:otherwise>ALTER_OVERFLOW</xsl:otherwise>
       </xsl:choose>
      </xsl:with-param>
     </xsl:call-template>
     <xsl:call-template name="AddParseItem">
      <xsl:with-param name="ParseIt" select="$PRS_COLUMN_ATTRIBUTE"/>
      <xsl:with-param name="Item">OVERFLOW CLAUSE</xsl:with-param>
      <xsl:with-param name="Value1">
       <xsl:if test="$ParentNode/sxml:OVERFLOW/sxml:SEGMENT_ATTRIBUTES/sxml:PCTFREE/@value1"> PCTFREE</xsl:if>
      </xsl:with-param>
      <xsl:with-param name="Value2">
       <xsl:if test="$ParentNode/sxml:OVERFLOW/sxml:SEGMENT_ATTRIBUTES/sxml:PCTUSED/@value1"> PCTUSED</xsl:if>
      </xsl:with-param>
      <xsl:with-param name="Value3">
       <xsl:if test="$ParentNode/sxml:OVERFLOW/sxml:SEGMENT_ATTRIBUTES/sxml:INITRANS/@value1"> INITRANS</xsl:if>
      </xsl:with-param>
      <xsl:with-param name="Value4">
       <xsl:if test="$ParentNode/sxml:OVERFLOW/sxml:SEGMENT_ATTRIBUTES/sxml:INITRANS/@value1"> INCLUDING COLUMN</xsl:if>
      </xsl:with-param>
     </xsl:call-template>
     <xsl:if test="$ParentNode/sxml:OVERFLOW/sxml:SEGMENT_ATTRIBUTES/sxml:TABLESPACE/@value1">
      <xsl:call-template name="AddParseItem">
       <xsl:with-param name="ParseIt" select="$PRS_ALTERABLE"/>
       <xsl:with-param name="Item">NOT_ALTERABLE</xsl:with-param>
       <xsl:with-param name="Value1">TABLESPACE</xsl:with-param>
      </xsl:call-template>
     </xsl:if>
    </xsl:element>
   </xsl:when>
   <xsl:when test="$Action='SQL'">
     <xsl:choose>
     <xsl:when test="$ParentNode/sxml:OVERFLOW/@src='1'"/>
     <xsl:when test="$ParentNode/sxml:OVERFLOW/@src='2'">
      <!-- including -->
      <xsl:element name="SQL_LIST">
       <xsl:element name="SQL_LIST_ITEM">
        <xsl:element name="TEXT">
        <xsl:choose>
         <xsl:when test="$ObjType='TABLE'">
          <xsl:text>ALTER TABLE </xsl:text>
         </xsl:when>
         <xsl:when test="$ObjType='MATERIALIZED_VIEW'">
          <xsl:text>ALTER MATERIALIZED VIEW </xsl:text>
         </xsl:when>
        </xsl:choose>
        <xsl:call-template name="SchemaName">
         <xsl:with-param name="ParentNode" select="$TableNode"/>
        </xsl:call-template>
        <xsl:text> ADD OVERFLOW </xsl:text>
        <!-- Segment_Attributes -->
        <xsl:call-template name="AlterSegmentAttributes">
         <xsl:with-param name="ParentNode" select="$ParentNode/sxml:OVERFLOW/sxml:SEGMENT_ATTRIBUTES"/>
         <xsl:with-param name="TypeNode" select="'ADD'"/>
        </xsl:call-template>
        <xsl:if test="$ListNode">
         <xsl:call-template name="PartitionList">
          <xsl:with-param name="ParentNode" select="$ListNode"/>
         </xsl:call-template>
        </xsl:if>
       </xsl:element>
       </xsl:element>
       <xsl:if test="$ParentNode/sxml:OVERFLOW/sxml:INCLUDING">
        <xsl:element name="SQL_LIST_ITEM">
         <xsl:element name="TEXT">
         <xsl:choose>
          <xsl:when test="$ObjType='TABLE'">
           <xsl:text>ALTER TABLE </xsl:text>
          </xsl:when>
          <xsl:when test="$ObjType='MATERIALIZED_VIEW'">
           <xsl:text>ALTER MATERIALIZED VIEW </xsl:text>
          </xsl:when>
         </xsl:choose>
         <xsl:call-template name="SchemaName">
          <xsl:with-param name="ParentNode" select="$TableNode"/>
         </xsl:call-template>
         <xsl:text> INCLUDING </xsl:text>
         <xsl:value-of select="$ParentNode/sxml:OVERFLOW/sxml:INCLUDING"/>
        </xsl:element>
        </xsl:element>
       </xsl:if>
      </xsl:element>
     </xsl:when>
     <xsl:otherwise>
      <!-- there are some diffs  -->
      <xsl:element name="SQL_LIST">
       <xsl:if test="$ParentNode/sxml:OVERFLOW/sxml:SEGMENT_ATTRIBUTES/sxml:PCTFREE/@value1 or
$ParentNode/sxml:OVERFLOW/sxml:SEGMENT_ATTRIBUTES/sxml:PCTUSED/@value1 or
$ParentNode/sxml:OVERFLOW/sxml:SEGMENT_ATTRIBUTES/sxml:INITRANS/@value1">
        <xsl:element name="SQL_LIST_ITEM">
         <xsl:element name="TEXT">
         <xsl:choose>
          <xsl:when test="$ObjType='TABLE'">
           <xsl:text>ALTER TABLE </xsl:text>
          </xsl:when>
          <xsl:when test="$ObjType='MATERIALIZED_VIEW'">
           <xsl:text>ALTER MATERIALIZED VIEW </xsl:text>
          </xsl:when>
         </xsl:choose>
         <xsl:call-template name="SchemaName">
          <xsl:with-param name="ParentNode" select="$TableNode"/>
         </xsl:call-template>
         <xsl:text> OVERFLOW </xsl:text>
         <!-- Physical_Attributes -->
         <xsl:call-template name="AlterPhysicalAttributes">
          <xsl:with-param name="ParentNode" select="$ParentNode/sxml:OVERFLOW/sxml:SEGMENT_ATTRIBUTES"/>
         </xsl:call-template>
         <!-- Tablespace can not be altered -->
         <!-- logging_clause -->
         <xsl:call-template name="AlterLogging">
          <xsl:with-param name="ParentNode" select="$ParentNode/sxml:OVERFLOW/sxml:SEGMENT_ATTRIBUTES"/>
         </xsl:call-template>
        </xsl:element>
        </xsl:element>
       </xsl:if>
       <xsl:if test="$ParentNode/sxml:OVERFLOW/sxml:INCLUDING/@value1 or
                       $ParentNode/sxml:OVERFLOW/sxml:INCLUDING/@src='2'">
        <xsl:element name="SQL_LIST_ITEM">
         <xsl:element name="TEXT">
        <xsl:choose>
          <xsl:when test="$ObjType='TABLE'">
           <xsl:text>ALTER TABLE </xsl:text>
          </xsl:when>
          <xsl:when test="$ObjType='MATERIALIZED_VIEW'">
           <xsl:text>ALTER MATERIALIZED VIEW </xsl:text>
          </xsl:when>
         </xsl:choose>
         <xsl:call-template name="SchemaName">
          <xsl:with-param name="ParentNode" select="$TableNode"/>
         </xsl:call-template>
         <xsl:text> INCLUDING </xsl:text>
         <xsl:value-of select="$ParentNode/sxml:OVERFLOW/sxml:INCLUDING"/>
        </xsl:element>
        </xsl:element>
       </xsl:if>
      </xsl:element>
     </xsl:otherwise>
    </xsl:choose>
   </xsl:when>
  </xsl:choose>
 </xsl:template>
 <xsl:template name="PartitionList">
  <xsl:param name="ParentNode" select="''"/>
  <!-- *******************************************************************
Template: PartitionList
ParentNode:sxml:PARTITION_LIST 
******************************************************************** -->
  <xsl:for-each select="$ParentNode/sxml:PARTITION_LIST_ITEM">
   <xsl:if test="sxml:PHYSICAL_PROPERTIES/sxml:INDEX_ORGANIZED_TABLE/sxml:OVERFLOW/sxml:SEGMENT_ATTRIBUTES/sxml:TABLESPACE">
    <xsl:if test="position()=1">
     <xsl:text>(</xsl:text>
    </xsl:if>
    <xsl:text> PARTITION </xsl:text>
    <!-- Segment_Attributes -->
    <xsl:call-template name="AlterSegmentAttributes">
     <xsl:with-param name="ParentNode" select="sxml:PHYSICAL_PROPERTIES/sxml:INDEX_ORGANIZED_TABLE/sxml:OVERFLOW/sxml:SEGMENT_ATTRIBUTES"/>
    </xsl:call-template>
    <xsl:if test="position()!=last()">
     <xsl:text>,</xsl:text>
    </xsl:if>
    <xsl:if test="position()=last()">
     <xsl:text>) </xsl:text>
    </xsl:if>
   </xsl:if>
  </xsl:for-each>
 </xsl:template>
 <xsl:template match="sxml:PCTFREE | sxml:PCTUSED | sxml:INITRANS |
                     sxml:INITIAL | sxml:NEXT | sxml:MINEXTENTS |
                     sxml:MAXEXTENTS | sxml:PCTINCREASE | sxml:FREELISTS |
                     sxml:FREELIST_GROUPS| 
		     sxml:LOBRETENTION|
		     sxml:MAXSIZE | sxml:BUFFER_POOL | sxml:FLASH_CACHE | sxml:CELL_FLASH_CACHE |
                     sxml:TABLESPACE | sxml:PCTTHRESHOLD | sxml:COMPRESS |
                     sxml:INCLUDING | sxml:DEFAULT_DIRECTORY |
                     sxml:REJECT_LIMIT | sxml:RETURN_AS | sxml:STORE_AS |
                     sxml:CHUNK | sxml:PCTVERSION">
  <!-- *******************************************************************
Template: PCTFREE, PCTUSED, INITRANS,
          INITIAL, NEXT, MINEXTENTS, MAXEXTENTS, PCTINCREASE, FREELISTS,
          FREELIST_GROUPS, LOBRETENTION, MAXSIZE, BUFFER_POOL, FLASH_CACHE, CELL_FLASH_CACHE
	  TABLESPACE, PCTTHRESHOLD,
          COMPRESS, INCLUDING, DEFAULT_DIRECTORY, REJECT_LIMIT,
          RETURN_AS, STORE_AS, CHUNK, PCTVERSION
******************************************************************** -->
  <xsl:text> </xsl:text>
  <xsl:choose>
   <xsl:when test="local-name(.)='FREELIST_GROUPS'">FREELIST GROUPS </xsl:when>
   <xsl:when test="local-name(.)='DEFAULT_DIRECTORY'">DEFAULT DIRECTORY "</xsl:when>
   <xsl:when test="local-name(.)='REJECT_LIMIT'">REJECT LIMIT </xsl:when>
   <xsl:when test="local-name(.)='RETURN_AS'">RETURN AS </xsl:when>
   <xsl:when test="local-name(.)='STORE_AS'">STORE AS </xsl:when>
   <xsl:otherwise>
    <xsl:value-of select="local-name(.)"/>
    <xsl:text> </xsl:text>
   </xsl:otherwise>
  </xsl:choose>
  <xsl:if test="local-name(.)='TABLESPACE'">"</xsl:if>
  <xsl:if test="local-name(.)='INCLUDING'">"</xsl:if>
  <xsl:value-of select="."/>
  <xsl:if test="local-name(.)='TABLESPACE'">"</xsl:if>
  <xsl:if test="local-name(.)='INCLUDING'">"</xsl:if>
  <xsl:if test="local-name(.)='DEFAULT_DIRECTORY'">"</xsl:if>
 </xsl:template>
 <xsl:template match="sxml:LOGGING">
 <!-- *******************************************************************
Template: LOGGING
******************************************************************** -->
  <xsl:choose>
   <xsl:when test=".='Y'"> LOGGING</xsl:when>
   <xsl:when test=".='N'"> NOLOGGING</xsl:when>
  </xsl:choose>
 </xsl:template>
</xsl:stylesheet>
