Dbms_Xmlschema Copyevolve

(10gR2) I have a schema based xmltype column inside an audit table.
Name Null Type
AUDIT_ID NUMBER
XML_DOCUMENT XMLTYPE()
A new Schema is now in place and I want to register the new schema and use the existing table and columns to insert these new XMLs. I used Dbms_Xmlschema.Copyevolve with a stylesheet and works perfectly. I now have fully validated XMLs against the new Schema.
However, copyevolve drops the old Schema and registers the new schema using the old schema URI.
Is there a way for copyevolve to rename the schema URI?
The problem I have is that new XMLs being parsed are using the new schemaLocation name.

(10gR2) I have a schema based xmltype column inside an audit table.
Name Null Type
AUDIT_ID NUMBER
XML_DOCUMENT XMLTYPE()
A new Schema is now in place and I want to register the new schema and use the existing table and columns to insert these new XMLs. I used Dbms_Xmlschema.Copyevolve with a stylesheet and works perfectly. I now have fully validated XMLs against the new Schema.
However, copyevolve drops the old Schema and registers the new schema using the old schema URI.
Is there a way for copyevolve to rename the schema URI?
The problem I have is that new XMLs being parsed are using the new schemaLocation name.

Similar Messages

  • Problems with the function DBMS_XMLSCHEMA.copyEvolve

    I´m having problems with the evolution of xml-schema.
    First the function DBMS_XMLSCHEMA.copyEvolve works correctly, but since one week I get only errors. Strangely is the fact that I use the same files (xml-schema, xslt and xml instances) and the same SQL-Code. Even if I delete all tables, directories, ... with the drop instruction and create them again, I get only error messages. It is also strangely that the function DBMS_XMLSCHEMA.copyEvolve not works if the old and new xml-schema are identical and no XSLT-Stylesheet is handed over. Can by the function DBMS_XMLSCHEMA.copyEvolve something going wrong in the database ? Do I must recreate the database, and how can I do that by the XE? But that can not be a good solution.
    Has anybody a idea what can I do?
    Here is my error report:
    Error starting at line 1 in command:
    BEGIN
    DBMS_XMLSCHEMA.copyEvolve(
    schemaURLs => xdb$string_list_t('http://localhost:8080/internal/xmlschema/testschema.xsd'),
    newSchemas => XMLSequenceType(XDBURIType('/public/testschema_evolution.xsd').getXML()),
    transforms => XMLSequenceType(XDBURIType('/public/MapTotestschema_evolution.xslt').getXML()));
    END;
    Error report:
    ORA-30944: Fehler beim Rollback für XML-Schema "http://localhost:8080/internal/xmlschema/testschema.xsd" Tabelle "MYUSER"."XMLSCHEMATABELLE" Spalte ""
    ORA-02304: Ungültiges Objektidentifizierungsliteral
    ORA-30942: Fehler bei XML Schema Evolution für Schema "http://localhost:8080/internal/xmlschema/testschema.xsd" Tabelle <n/a> Spalte ""
    ORA-31088: Objekt "MYUSER"."BIN$QNQjNoYiRfC4KlQtnfUpMw==$0" hängt von Schema ab
    ORA-06512: in "XDB.DBMS_XMLSCHEMA_INT", Zeile 113
    ORA-06512: in "XDB.DBMS_XMLSCHEMA", Zeile 210
    ORA-06512: in Zeile 2
    Thanks David

    Can you try doing the following before running copyEvolve
    SQL> purge recyclebin
      2  /
    Recyclebin purged.
    SQL> alter session set recyclebin =  off
      2  /
    Session altered.
    SQL>and see if it works as expected.

  • DBMS_XMLSCHEMA.CopyEvolve produces ORA-30945: Could not create mapping tabl

    Hi,
    I am trying to update a XML Schema concerning the documents relaties.xsd (the old one) and relaties_v2.xsd (the new one containing only a minor change).
    The document relaties.xsd looks like this:
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xdb="http://xmlns.oracle.com/xdb"
    elementFormDefault="unqualified"
    attributeFormDefault="unqualified"
    version="1.0">
         <xsd:element name="Relatie" xdb:defaultTable="">
              <xsd:complexType>
                   <xsd:sequence>
                        <xsd:element name="Voornaam" type="xsd:string"/>
                        <xsd:element name="Achternaam" type="xsd:string"/>
                        <xsd:element name="Tussenvoegsel" type="xsd:string"/>
                        <xsd:element name="Geboortedatum" type="xsd:date"/>
                        <xsd:element name="Geslacht">
    <xsd:simpleType>
    <xsd:restriction base="xsd:string">
    <xsd:enumeration value="M"/>
    <xsd:enumeration value="V"/>
    </xsd:restriction>
    </xsd:simpleType>
    </xsd:element>
                        <xsd:element name="Sofinummer">
    <xsd:simpleType>
    <xsd:restriction base="xsd:string">
    <xsd:pattern value="\d{9}"/>
    </xsd:restriction>
    </xsd:simpleType>
    </xsd:element>
                        <xsd:element name="Straatnaam" type="xsd:string"/>
                        <xsd:element name="Huisnummer" type="xsd:string"/>
                        <xsd:element name="Woonplaats" type="xsd:string"/>
                        <!--xsd:element name="Postcode" type="xsd:string"/-->
                        <xsd:element name="Postcode">
    <xsd:simpleType>
    <xsd:restriction base="xsd:string">
    <xsd:pattern value="\d{4} [A-Z]{2}"/>
    </xsd:restriction>
    </xsd:simpleType>
    </xsd:element>
                        <xsd:element name="Zrn">
    <xsd:simpleType>
    <xsd:restriction base="xsd:integer">
    <xsd:minInclusive value="1000000"/>
    <xsd:maxInclusive value="99999999999999"/>
    </xsd:restriction>
    </xsd:simpleType>
    </xsd:element>
                   </xsd:sequence>
              </xsd:complexType>
         </xsd:element>
    </xsd:schema>
    Here are the steps I took.
    DECLARE
    res BOOLEAN;
    BEGIN
    res := DBMS_XDB.createResource('/xsd/relaties.xsd',
    bfilename('XSDDIR', 'relaties.xsd')
    END;
    DECLARE
    res BOOLEAN;
    BEGIN
    res := DBMS_XDB.createResource('/xsd/relaties_v2.xsd',
    bfilename('XSDDIR', 'relaties_v2.xsd')
    END;
    BEGIN
    DBMS_XMLSCHEMA.registerSchema(
    'http://localhost:8080/xsd/relaties.xsd',
    XDBURIType('/xsd/relaties.xsd').getClob(),
    TRUE,
    FALSE,
    FALSE,
    TRUE);
    END;
    CREATE
    TABLE relatie_documenten OF XMLTYPE
    XMLSCHEMA "http://localhost:8080/xsd/relaties.xsd"
    ELEMENT "Relatie"
    CREATE OR REPLACE
    TRIGGER upo_rdt_ai
    AFTER INSERT ON relatie_documenten
    FOR EACH ROW
    DECLARE
    doc XMLType;
    BEGIN
    doc := :new.SYS_NC_ROWINFO$;
    XMLType.schemaValidate(doc);
    END;
    Then I inserted some xml documents into the table relatie_documenten. The XSD worked fine.
    Then I executed the following statement:
    BEGIN
    DBMS_XMLSCHEMA.copyEvolve
    ( schemaURLs => xdb$string_list_t('http://localhost:8080/xsd/relaties.xsd')
    , newSchemas => XMLSequenceType(XDBURIType('/xsd/relaties_v2.xsd').getXML())
    , preserveOldDocs => TRUE
    , mapTabName => 'RELATIE_DOCUMENTEN_TEMP'
    , generateTables => FALSE
    END;
    This resulted in:
    ERROR at line 1:
    ORA-30945: Could not create mapping table 'RELATIE_DOCUMENTEN_TEMP'
    ORA-00600: internal error code, arguments: [kqludp2], [0x66AB407C], [0], [],
    ORA-06512: at "XDB.DBMS_XMLSCHEMA_INT", line 113
    ORA-06512: at "XDB.DBMS_XMLSCHEMA", line 210
    ORA-06512: at line 2
    I checked system priviliges as documented in XML DB Developers Guide, Chapter 8 XML Schema Evolution. No other users were connected. The mapping table RELATIE_DOCUMENTEN_TEMP nor any other object named RELATIE_DOCUMENTEN_TEMP did not exist.
    Anyone an idea why I cannot create my mapping table ?
    Gregor

    Which release / platform are you working with
    With 10.2.0.2.1 on Widows I get
    SQL> var schemaURL varchar2(256)
    SQL> var schemaPath varchar2(256)
    SQL> --
    SQL> begin
      2    :schemaURL := 'http://localhost:8080/xsd/relaties.xsd';
      3    :schemaPath := '/public/relaties.xsd';
      4  end;
      5  /
    PL/SQL procedure successfully completed.
    SQL> call dbms_xmlSchema.deleteSchema(:schemaURL,4)
      2  /
    Call completed.
    SQL> declare
      2    res boolean;
      3    xmlSchema xmlType := xmlType(
      4  '<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
      5              xmlns:xdb="http://xmlns.oracle.com/xdb"
      6                 elementFormDefault="unqualified"
      7                 attributeFormDefault="unqualified"
      8                 version="1.0">
      9     <xsd:element name="Relatie" xdb:defaultTable="">
    10             <xsd:complexType>
    11                     <xsd:sequence>
    12                             <xsd:element name="Voornaam" type="xsd:string"/>
    13                             <xsd:element name="Achternaam" type="xsd:string"/>
    14                             <xsd:element name="Tussenvoegsel" type="xsd:string"/>
    15                             <xsd:element name="Geboortedatum" type="xsd:date"/>
    16                             <xsd:element name="Geslacht">
    17                 <xsd:simpleType>
    18                    <xsd:restriction base="xsd:string">
    19                       <xsd:enumeration value="M"/>
    20                       <xsd:enumeration value="V"/>
    21                    </xsd:restriction>
    22                 </xsd:simpleType>
    23              </xsd:element>
    24                     <xsd:element name="Sofinummer">
    25                 <xsd:simpleType>
    26                    <xsd:restriction base="xsd:string">
    27                       <xsd:pattern value="\d{9}"/>
    28                    </xsd:restriction>
    29                 </xsd:simpleType>
    30              </xsd:element>
    31                             <xsd:element name="Straatnaam" type="xsd:string"/>
    32                             <xsd:element name="Huisnummer" type="xsd:string"/>
    33                             <xsd:element name="Woonplaats" type="xsd:string"/>
    34                             <!--xsd:element name="Postcode" type="xsd:string"/-->
    35                             <xsd:element name="Postcode">
    36                 <xsd:simpleType>
    37                    <xsd:restriction base="xsd:string">
    38                       <xsd:pattern value="\d{4} [A-Z]{2}"/>
    39                    </xsd:restriction>
    40                 </xsd:simpleType>
    41              </xsd:element>
    42                             <xsd:element name="Zrn">
    43                 <xsd:simpleType>
    44                    <xsd:restriction base="xsd:integer">
    45                       <xsd:minInclusive value="1000000"/>
    46                       <xsd:maxInclusive value="99999999999999"/>
    47                    </xsd:restriction>
    48                 </xsd:simpleType>
    49              </xsd:element>
    50                     </xsd:sequence>
    51             </xsd:complexType>
    52     </xsd:element>
    53  </xsd:schema>');
    54  begin
    55    if (dbms_xdb.existsResource(:schemaPath)) then
    56      dbms_xdb.deleteResource(:schemaPath);
    57    end if;
    58    res := dbms_xdb.createResource(:schemaPath,xmlSchema);
    59  end;
    60  /
    PL/SQL procedure successfully completed.
    SQL> BEGIN
      2    DBMS_XMLSCHEMA.registerSchema(
      3      :schemaURL,
      4      XDBURIType(:schemaPath).getClob(),
      5      TRUE,
      6      FALSE,
      7      FALSE,
      8      TRUE);
      9  END;
    10  /
    PL/SQL procedure successfully completed.
    SQL> DROP TABLE relatie_documenten FORCE
      2  /
    Table dropped.
    SQL> CREATE TABLE relatie_documenten OF XMLTYPE
      2         XMLSCHEMA "http://localhost:8080/xsd/relaties.xsd"
      3         ELEMENT "Relatie"
      4  /
    Table created.
    SQL> CREATE OR REPLACE TRIGGER upo_rdt_ai
      2  AFTER INSERT ON relatie_documenten
      3  FOR EACH ROW
      4  DECLARE
      5     doc XMLType;
      6  BEGIN
      7     doc := :new.SYS_NC_ROWINFO$;
      8     XMLType.schemaValidate(doc);
      9  END;
    10  /
    Trigger created.
    SQL> INSERT
      2  INTO   relatie_documenten
      3  VALUES (XMLType
      4           ('<Relatie>
      5                <Voornaam>Johan</Voornaam>
      6                <Achternaam>Hermans</Achternaam>
      7                <Tussenvoegsel/>
      8                <Geboortedatum>1978-01-02</Geboortedatum>
      9                <Geslacht>M</Geslacht>
    10                <Sofinummer>233300417</Sofinummer>
    11                <Straatnaam>Stationstraat</Straatnaam>
    12                <Huisnummer>10</Huisnummer>
    13                <Woonplaats>Weesp</Woonplaats>
    14                <Postcode>1383 AK</Postcode>
    15                <Zrn>1234567</Zrn>
    16             </Relatie>'
    17          ).CreateSchemaBasedXML(:schemaURL))
    18  /
    1 row created.
    SQL> commit
      2  /
    Commit complete.
    SQL> INSERT
      2  INTO   relatie_documenten
      3  VALUES (XMLType
      4           ('<Relatie>
      5                <Voornaam>Johanna</Voornaam>
      6                <Achternaam>Gurts</Achternaam>
      7                <Tussenvoegsel/>
      8                <Geboortedatum>1975-11-12</Geboortedatum>
      9                <Geslacht>V</Geslacht>
    10                <Sofinummer>234109807</Sofinummer>
    11                <Straatnaam>Stationstraat</Straatnaam>
    12                <Huisnummer>10</Huisnummer>
    13                <Woonplaats>Weesp</Woonplaats>
    14                <Postcode>1383 AK</Postcode>
    15                <Zrn>7654321</Zrn>
    16             </Relatie>').CreateSchemaBasedXML(:schemaURL))
    17  /
    1 row created.
    SQL> commit
      2  /
    Commit complete.
    SQL> INSERT
      2  INTO   relatie_documenten
      3  VALUES (XMLType
      4           ('<Relatie>
      5                <Voornaam>Johanna</Voornaam>
      6                <Achternaam>Gurts</Achternaam>
      7                <Tussenvoegsel/>
      8                <Geboortedatum>1975-11-12</Geboortedatum>
      9                <Geslacht>O</Geslacht>
    10                <Sofinummer>234109807</Sofinummer>
    11                <Straatnaam>Stationstraat</Straatnaam>
    12                <Huisnummer>10</Huisnummer>
    13                <Woonplaats>Weesp</Woonplaats>
    14                <Postcode>1383 AK</Postcode>
    15                <Zrn>7654321</Zrn>
    16             </Relatie>').CreateSchemaBasedXML(:schemaURL))
    17  /
    VALUES (XMLType
    ERROR at line 3:
    ORA-31038: Invalid enumeration value: "O"
    ORA-06512: at "SYS.XMLTYPE", line 345
    ORA-06512: at "SCOTT.UPO_RDT_AI", line 5
    ORA-04088: error during execution of trigger 'SCOTT.UPO_RDT_AI'
    SQL> commit
      2  /
    Commit complete.
    SQL> declare
      2    xmlschema xmltype;
      3    res       boolean;
      4  begin
      5    select xdburitype(:schemaPath).getXML()
      6      into xmlSchema
      7      from dual;
      8    dbms_xdb.deleteResource(:schemaPath);
      9    select insertChildXML
    10           (
    11             xmlschema,
    12             '/xsd:schema//xsd:element[@name="Geslacht"]/xsd:simpleType/xsd:restriction',
    13             'xsd:enumeration',
    14             xmltype('<xsd:enumeration xmlns:xsd="http://www.w3.org/2001/XMLSchema" value="O"/>'),
    15             'xmlns:xsd="http://www.w3.org/2001/XMLSchema"'
    16           )
    17    into xmlSchema
    18    from dual;
    19    res := dbms_xdb.createResource(:schemaPath,xmlSchema);
    20  end;
    21  /
    PL/SQL procedure successfully completed.
    SQL> commit
      2  /
    Commit complete.
    SQL> set long 100000 pages 200 lines 140
    SQL> --
    SQL> select xdburitype(:schemaPath).getXML()
      2    from dual
      3  /
    XDBURITYPE(:SCHEMAPATH).GETXML()
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xdb="http://xmlns.oracle.com/xdb" elementFormDefault="unqualified" attributeF
    ormDefault="unqualified" version="1.0">
      <xsd:element name="Relatie" xdb:defaultTable="">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="Voornaam" type="xsd:string"/>
            <xsd:element name="Achternaam" type="xsd:string"/>
            <xsd:element name="Tussenvoegsel" type="xsd:string"/>
            <xsd:element name="Geboortedatum" type="xsd:date"/>
            <xsd:element name="Geslacht">
              <xsd:simpleType>
                <xsd:restriction base="xsd:string">
                  <xsd:enumeration value="M"/>
                  <xsd:enumeration value="V"/>
                  <xsd:enumeration xmlns:xsd="http://www.w3.org/2001/XMLSchema" value="O"/>
                </xsd:restriction>
              </xsd:simpleType>
            </xsd:element>
            <xsd:element name="Sofinummer">
              <xsd:simpleType>
                <xsd:restriction base="xsd:string">
                  <xsd:pattern value="\d{9}"/>
                </xsd:restriction>
              </xsd:simpleType>
            </xsd:element>
            <xsd:element name="Straatnaam" type="xsd:string"/>
            <xsd:element name="Huisnummer" type="xsd:string"/>
            <xsd:element name="Woonplaats" type="xsd:string"/>
            <!--xsd:element name="Postcode" type="xsd:string"/-->
            <xsd:element name="Postcode">
              <xsd:simpleType>
                <xsd:restriction base="xsd:string">
                  <xsd:pattern value="\d{4} [A-Z]{2}"/>
                </xsd:restriction>
              </xsd:simpleType>
            </xsd:element>
            <xsd:element name="Zrn">
              <xsd:simpleType>
                <xsd:restriction base="xsd:integer">
                  <xsd:minInclusive value="1000000"/>
                  <xsd:maxInclusive value="99999999999999"/>
                </xsd:restriction>
              </xsd:simpleType>
            </xsd:element>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
    </xsd:schema>
    SQL> DROP TABLE RELATIE_DOCUMENTEN_TEMP
      2  /
    Table dropped.
    SQL> BEGIN
      2    DBMS_XMLSCHEMA.copyEvolve
      3      ( schemaURLs      => xdb$string_list_t(:schemaURL)
      4      , newSchemas      => XMLSequenceType(XDBURIType(:schemaPath).getXML())
      5      , preserveOldDocs => TRUE
      6      , mapTabName      => 'RELATIE_DOCUMENTEN_TEMP'
      7      , generateTables  => FALSE
      8      );
      9  END;
    10  /
    PL/SQL procedure successfully completed.
    SQL> CREATE TABLE relatie_documenten OF XMLTYPE
      2         XMLSCHEMA "http://localhost:8080/xsd/relaties.xsd"
      3         ELEMENT "Relatie"
      4  /
    Table created.
    SQL> CREATE OR REPLACE TRIGGER upo_rdt_ai
      2  AFTER INSERT ON relatie_documenten
      3  FOR EACH ROW
      4  DECLARE
      5     doc XMLType;
      6  BEGIN
      7     doc := :new.SYS_NC_ROWINFO$;
      8     XMLType.schemaValidate(doc);
      9  END;
    10  /
    Trigger created.
    SQL> declare
      2    tablename varchar2(2000);
      3  begin
      4    select temp_tabname
      5      into tablename
      6      from RELATIE_DOCUMENTEN_TEMP
      7     where table_name = USER || '.' || upper('relatie_documenten');
      8    execute immediate 'insert into relatie_documenten select xmltype(data) from ' || tablename;
      9    commit;
    10  end;
    11  /
    PL/SQL procedure successfully completed.
    SQL> select *
      2    from relatie_documenten
      3  /
    SYS_NC_ROWINFO$
    <Relatie>
      <Voornaam>Johan</Voornaam>
      <Achternaam>Hermans</Achternaam>
      <Tussenvoegsel/>
      <Geboortedatum>1978-01-02</Geboortedatum>
      <Geslacht>M</Geslacht>
      <Sofinummer>233300417</Sofinummer>
      <Straatnaam>Stationstraat</Straatnaam>
      <Huisnummer>10</Huisnummer>
      <Woonplaats>Weesp</Woonplaats>
      <Postcode>1383 AK</Postcode>
      <Zrn>1234567</Zrn>
    </Relatie>
    <Relatie>
      <Voornaam>Johanna</Voornaam>
      <Achternaam>Gurts</Achternaam>
      <Tussenvoegsel/>
      <Geboortedatum>1975-11-12</Geboortedatum>
      <Geslacht>V</Geslacht>
      <Sofinummer>234109807</Sofinummer>
      <Straatnaam>Stationstraat</Straatnaam>
      <Huisnummer>10</Huisnummer>
      <Woonplaats>Weesp</Woonplaats>
      <Postcode>1383 AK</Postcode>
      <Zrn>7654321</Zrn>
    </Relatie>
    SQL> INSERT
      2  INTO   relatie_documenten
      3  VALUES (XMLType
      4           ('<Relatie>
      5                <Voornaam>Johanna</Voornaam>
      6                <Achternaam>Gurts</Achternaam>
      7                <Tussenvoegsel/>
      8                <Geboortedatum>1975-11-12</Geboortedatum>
      9                <Geslacht>O</Geslacht>
    10                <Sofinummer>234109807</Sofinummer>
    11                <Straatnaam>Stationstraat</Straatnaam>
    12                <Huisnummer>10</Huisnummer>
    13                <Woonplaats>Weesp</Woonplaats>
    14                <Postcode>1383 AK</Postcode>
    15                <Zrn>7654321</Zrn>
    16             </Relatie>').CreateSchemaBasedXML(:schemaURL))
    17  /
    1 row created.
    SQL> commit
      2  /
    Commit complete.
    SQL> select *
      2    from relatie_documenten
      3  /
    SYS_NC_ROWINFO$
    <Relatie>
      <Voornaam>Johan</Voornaam>
      <Achternaam>Hermans</Achternaam>
      <Tussenvoegsel/>
      <Geboortedatum>1978-01-02</Geboortedatum>
      <Geslacht>M</Geslacht>
      <Sofinummer>233300417</Sofinummer>
      <Straatnaam>Stationstraat</Straatnaam>
      <Huisnummer>10</Huisnummer>
      <Woonplaats>Weesp</Woonplaats>
      <Postcode>1383 AK</Postcode>
      <Zrn>1234567</Zrn>
    </Relatie>
    <Relatie>
      <Voornaam>Johanna</Voornaam>
      <Achternaam>Gurts</Achternaam>
      <Tussenvoegsel/>
      <Geboortedatum>1975-11-12</Geboortedatum>
      <Geslacht>V</Geslacht>
      <Sofinummer>234109807</Sofinummer>
      <Straatnaam>Stationstraat</Straatnaam>
      <Huisnummer>10</Huisnummer>
      <Woonplaats>Weesp</Woonplaats>
      <Postcode>1383 AK</Postcode>
      <Zrn>7654321</Zrn>
    </Relatie>
    <Relatie>
      <Voornaam>Johanna</Voornaam>
      <Achternaam>Gurts</Achternaam>
      <Tussenvoegsel/>
      <Geboortedatum>1975-11-12</Geboortedatum>
      <Geslacht>O</Geslacht>
      <Sofinummer>234109807</Sofinummer>
      <Straatnaam>Stationstraat</Straatnaam>
      <Huisnummer>10</Huisnummer>
      <Woonplaats>Weesp</Woonplaats>
      <Postcode>1383 AK</Postcode>
      <Zrn>7654321</Zrn>
    </Relatie>
    SQL>Here's the SQL, can you cut'n'paste and run the whole thing as XML_OWNER
    var schemaURL varchar2(256)
    var schemaPath varchar2(256)
    begin
      :schemaURL := 'http://localhost:8080/xsd/relaties.xsd';
      :schemaPath := '/public/relaties.xsd';
    end;
    call dbms_xmlSchema.deleteSchema(:schemaURL,4)
    declare
      res boolean;
      xmlSchema xmlType := xmlType(
    '<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                xmlns:xdb="http://xmlns.oracle.com/xdb"
                   elementFormDefault="unqualified"
                   attributeFormDefault="unqualified"
                   version="1.0">
         <xsd:element name="Relatie" xdb:defaultTable="">
              <xsd:complexType>
                   <xsd:sequence>
                        <xsd:element name="Voornaam" type="xsd:string"/>
                        <xsd:element name="Achternaam" type="xsd:string"/>
                        <xsd:element name="Tussenvoegsel" type="xsd:string"/>
                        <xsd:element name="Geboortedatum" type="xsd:date"/>
                        <xsd:element name="Geslacht">
                   <xsd:simpleType>
                      <xsd:restriction base="xsd:string">
                         <xsd:enumeration value="M"/>
                         <xsd:enumeration value="V"/>
                      </xsd:restriction>
                   </xsd:simpleType>
                </xsd:element>
                     <xsd:element name="Sofinummer">
                   <xsd:simpleType>
                      <xsd:restriction base="xsd:string">
                         <xsd:pattern value="\d{9}"/>
                      </xsd:restriction>
                   </xsd:simpleType>
                </xsd:element>
                        <xsd:element name="Straatnaam" type="xsd:string"/>
                        <xsd:element name="Huisnummer" type="xsd:string"/>
                        <xsd:element name="Woonplaats" type="xsd:string"/>
                        <!--xsd:element name="Postcode" type="xsd:string"/-->
                        <xsd:element name="Postcode">
                   <xsd:simpleType>
                      <xsd:restriction base="xsd:string">
                         <xsd:pattern value="\d{4} [A-Z]{2}"/>
                      </xsd:restriction>
                   </xsd:simpleType>
                </xsd:element>
                        <xsd:element name="Zrn">
                   <xsd:simpleType>
                      <xsd:restriction base="xsd:integer">
                         <xsd:minInclusive value="1000000"/>
                         <xsd:maxInclusive value="99999999999999"/>
                      </xsd:restriction>
                   </xsd:simpleType>
                </xsd:element>
                   </xsd:sequence>
              </xsd:complexType>
         </xsd:element>
    </xsd:schema>');
    begin
      if (dbms_xdb.existsResource(:schemaPath)) then
        dbms_xdb.deleteResource(:schemaPath);
      end if;
      res := dbms_xdb.createResource(:schemaPath,xmlSchema);
    end;
    BEGIN
      DBMS_XMLSCHEMA.registerSchema(
        :schemaURL,
        XDBURIType(:schemaPath).getClob(),
        TRUE,
        FALSE,
        FALSE,
        TRUE);
    END;
    DROP TABLE relatie_documenten FORCE
    CREATE TABLE relatie_documenten OF XMLTYPE
           XMLSCHEMA "http://localhost:8080/xsd/relaties.xsd"
           ELEMENT "Relatie"
    CREATE OR REPLACE TRIGGER upo_rdt_ai
    AFTER INSERT ON relatie_documenten
    FOR EACH ROW
    DECLARE
       doc XMLType;
    BEGIN
       doc := :new.SYS_NC_ROWINFO$;
       XMLType.schemaValidate(doc);
    END;
    INSERT
    INTO   relatie_documenten
    VALUES (XMLType
             ('<Relatie>
                  <Voornaam>Johan</Voornaam>
                  <Achternaam>Hermans</Achternaam>
                  <Tussenvoegsel/>
                  <Geboortedatum>1978-01-02</Geboortedatum>
                  <Geslacht>M</Geslacht>
                  <Sofinummer>233300417</Sofinummer>
                  <Straatnaam>Stationstraat</Straatnaam>
                  <Huisnummer>10</Huisnummer>
                  <Woonplaats>Weesp</Woonplaats>
                  <Postcode>1383 AK</Postcode>
                  <Zrn>1234567</Zrn>
               </Relatie>'
            ).CreateSchemaBasedXML(:schemaURL))
    commit
    INSERT
    INTO   relatie_documenten
    VALUES (XMLType
             ('<Relatie>
                  <Voornaam>Johanna</Voornaam>
                  <Achternaam>Gurts</Achternaam>
                  <Tussenvoegsel/>
                  <Geboortedatum>1975-11-12</Geboortedatum>
                  <Geslacht>V</Geslacht>
                  <Sofinummer>234109807</Sofinummer>
                  <Straatnaam>Stationstraat</Straatnaam>
                  <Huisnummer>10</Huisnummer>
                  <Woonplaats>Weesp</Woonplaats>
                  <Postcode>1383 AK</Postcode>
                  <Zrn>7654321</Zrn>
               </Relatie>').CreateSchemaBasedXML(:schemaURL))
    commit
    INSERT
    INTO   relatie_documenten
    VALUES (XMLType
             ('<Relatie>
                  <Voornaam>Johanna</Voornaam>
                  <Achternaam>Gurts</Achternaam>
                  <Tussenvoegsel/>
                  <Geboortedatum>1975-11-12</Geboortedatum>
                  <Geslacht>O</Geslacht>
                  <Sofinummer>234109807</Sofinummer>
                  <Straatnaam>Stationstraat</Straatnaam>
                  <Huisnummer>10</Huisnummer>
                  <Woonplaats>Weesp</Woonplaats>
                  <Postcode>1383 AK</Postcode>
                  <Zrn>7654321</Zrn>
               </Relatie>').CreateSchemaBasedXML(:schemaURL))
    commit
    declare
      xmlschema xmltype;
      res       boolean;
    begin
      select xdburitype(:schemaPath).getXML()
        into xmlSchema
        from dual;
      dbms_xdb.deleteResource(:schemaPath);
      select insertChildXML
               xmlschema,
               '/xsd:schema//xsd:element[@name="Geslacht"]/xsd:simpleType/xsd:restriction',
               'xsd:enumeration',
               xmltype('<xsd:enumeration xmlns:xsd="http://www.w3.org/2001/XMLSchema" value="O"/>'),
               'xmlns:xsd="http://www.w3.org/2001/XMLSchema"'
      into xmlSchema
      from dual;
      res := dbms_xdb.createResource(:schemaPath,xmlSchema);
    end;
    commit
    set long 100000 pages 200 lines 140
    select xdburitype(:schemaPath).getXML()
      from dual
    DROP TABLE RELATIE_DOCUMENTEN_TEMP
    BEGIN
      DBMS_XMLSCHEMA.copyEvolve
        ( schemaURLs      => xdb$string_list_t(:schemaURL)
        , newSchemas      => XMLSequenceType(XDBURIType(:schemaPath).getXML())
        , preserveOldDocs => TRUE
        , mapTabName      => 'RELATIE_DOCUMENTEN_TEMP'
        , generateTables  => FALSE
    END;
    CREATE TABLE relatie_documenten OF XMLTYPE
           XMLSCHEMA "http://localhost:8080/xsd/relaties.xsd"
           ELEMENT "Relatie"
    CREATE OR REPLACE TRIGGER upo_rdt_ai
    AFTER INSERT ON relatie_documenten
    FOR EACH ROW
    DECLARE
       doc XMLType;
    BEGIN
       doc := :new.SYS_NC_ROWINFO$;
       XMLType.schemaValidate(doc);
    END;
    declare
      tablename varchar2(2000);
    begin
      select temp_tabname
        into tablename
        from RELATIE_DOCUMENTEN_TEMP
       where table_name = USER || '.' || upper('relatie_documenten');
      execute immediate 'insert into relatie_documenten select xmltype(data) from ' || tablename;
      commit;
    end;
    select *
      from relatie_documenten
    INSERT
    INTO   relatie_documenten
    VALUES (XMLType
             ('<Relatie>
                  <Voornaam>Johanna</Voornaam>
                  <Achternaam>Gurts</Achternaam>
                  <Tussenvoegsel/>
                  <Geboortedatum>1975-11-12</Geboortedatum>
                  <Geslacht>O</Geslacht>
                  <Sofinummer>234109807</Sofinummer>
                  <Straatnaam>Stationstraat</Straatnaam>
                  <Huisnummer>10</Huisnummer>
                  <Woonplaats>Weesp</Woonplaats>
                  <Postcode>1383 AK</Postcode>
                  <Zrn>7654321</Zrn>
               </Relatie>').CreateSchemaBasedXML(:schemaURL))
    commit
    select *
      from relatie_documenten
    /

  • DBMS_XMLSCHEMA.COPYEVOLVE failing with ORA-06502 ORA-30942 and ORA-30944

    Hi all,
    We have a procedure we're testing to evolve XML schemas. Fairly simple and straightforward, and on our development box (Win Server 2003) it works fine. However on our test server (Solaris) we get this -
    tdm@TDMRSTG>Alter session set RECYCLEBIN=off
    2 ;
    Session altered.
    Elapsed: 00:00:00.00
    tdm@TDMRSTG>
    1 begin
    2 tdm_maintenance_pkg.EVOLVE_SCHEMA(
    3 'http://uk-LONDBS006:8080/public/TDM/xsd/TDM_Computation_1_2_3.xsd',
    4 'XMLDIR',
    5 'evolveTDM_Computation_1.xsd'
    6 );
    7* end;
    tdm@TDMRSTG>/
    begin
    ERROR at line 1:
    ORA-30944: Error during rollback for XML schema 'http://uk-LONDBS006:8080/public/TDM/xsd/TDM_Computa
    "TDM"."TDM_COMPUTATION" column 'XML'
    ORA-06502: PL/SQL: numeric or value error
    ORA-06512: at "SYS.XMLTYPE", line 254
    ORA-06512: at line 1
    ORA-30942: XML Schema Evolution error for schema 'http://uk-LONDBS006:8080/public/TDM/xsd/TDM_Comput
    "TDM"."TDM_COMPUTATION" column 'XML'
    ORA-06502: PL/SQL: numeric or value error
    ORA-06512: at "SYS.XMLTYPE", line 254
    ORA-06512: at line 1
    ORA-06512: at "XDB.DBMS_XMLSCHEMA_INT", line 113
    ORA-06512: at "XDB.DBMS_XMLSCHEMA", line 210
    ORA-06512: at "TDM.TDM_MAINTENANCE_PKG", line 47
    ORA-06512: at line 2
    Elapsed: 00:01:43.03
    tdm@TDMRSTG>
    Here's the listing of the procedure -
    PROCEDURE evolve_schema ( p_oldSchema IN VARCHAR2
    , p_directory IN VARCHAR2
    , p_newSchema IN VARCHAR2 )
    IS
    BEGIN
    DBMS_XMLSCHEMA.COPYEVOLVE(
    xdb$string_list_t(p_oldSchema),
    XMLSequenceType(xmltype(getXml(p_Directory,p_newSchema)) )
    END;
    We're all pretty new to all of this, so any help would be grately appreciated.
    Regards
    Geoff.

    Hello
    You are selecting 8000 characters from position 4001, not 4000 characters from position 4001....
      FUNCTION substr(lob_loc IN BLOB,
                      amount  IN INTEGER := 32767,
                      offset  IN INTEGER := 1)dbms_lob.substr(billing_inventory,4000,1),dbms_lob.substr(billing_inventory,8000,4001)
    You need to modify the 2nd substr in each select statement to be
    dbms_lob.substr(billing_inventory,4000,1),dbms_lob.substr(billing_inventory,4001,4000)
    HTH
    David
    Edited by: David Tyler on Jun 27, 2011 1:16 PM

  • Help with DBMS_XMLSCHEMA.copyEvolve Transforms Parameter

    Oracle 11gr2 on Linux VM
    SQL*Plus: Release 11.2.0.1.0 Production on Wed Feb 22 13:51:28 2012
    Copyright (c) 1982, 2009, Oracle.  All rights reserved.
    Enter user-name: jmendez
    Enter password:
    Connected to:
    Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options
    BANNER
    Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
    PL/SQL Release 11.2.0.1.0 - Production
    CORE    11.2.0.1.0      Production
    TNS for Linux: Version 11.2.0.1.0 - Production
    NLSRTL Version 11.2.0.1.0 - Production I'm not sure how to properly use the DBMS_XMLSCHEMA.copyEvolve procedure. I'm trying to evolve a schema (ArchivalTypes) and its dependent schema (collection). There are lots of transformations for the collection schema but Archival Types is just a schema made up of Arrays referenced in the collection schema (and eventually 4 other schemas). I don't "think" I need an XSL for archivalTypes... so how do I enter a null value since the transforms parameter in the procedure requires XSL files to be specified in the exact order as the schema files were listed (sorry if I'm not making sense). Below is my command:
    BEGIN
      DBMS_XMLSCHEMA.copyEvolve(
        xdb$string_list_t('http://localhost/xsd/test/ArchivalTypes_test.xsd','http://localhost/xsd/test/Collection.xsd'),
        XMLSequenceType(XDBURIType('/u01/app/xsd/test/ArchivalTypesEvolve.xsd').getXML(),XDBURIType('/u01/app/xsd/test/Collection_Evolve.xsd').getXML()),
        XMLSequenceType(XDBURIType('/u01/app/xsd/test/Collection_Evolve.xsl').getXML()));
    END;
    /I appreciate any help I can get here.

    Actually, I don't know why I didn't think about this before but it worked without having to "evolve" ArchiveTypes. ArchiveTypesEvolve is included in the new collection.xsd like so:
         <xs:include schemaLocation="http://localhost/xsd/test/ArchivalTypesEvolve.xsd"/>Does it make sense then? When I do schema evolution I just specify Collection.xsd and it works?
    BEGIN
      DBMS_XMLSCHEMA.copyEvolve(
        xdb$string_list_t('http://localhost/xsd/test/Collection.xsd'),
        XMLSequenceType(XDBURIType('/u01/app/xsd/test/Collection_Evolve.xsd').getXML()),
        XMLSequenceType(XDBURIType('/u01/app/xsd/test/Collection_Evolve.xsl').getXML()));
    END;
    /Should I be concerned that it worked this way? All the mapping was correct and the data looks good. I just thought it would be a little more complicated since Collection_test used ArchivalTypes and the new Collection_Evolve uses ArchivalTypesEvolve.

  • ExtractValue not returning the data after dbms_xmlschema.CopyEvolve

    Hi ,
    I am facing the problem while selecting the value from the XMLTYPE table using extractValue.
    Here address field is newly added to schema and evolved . But unable to get the address field value .
    My procedures are like this
    SQL> declare
    2 res boolean;
    3 xmlschema xmltype := xmltype(
    4 '<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xdb="http://xmlns.oracle.com/xdb">
    5 <xsd:complexType name="t_person" xdb:SQLType="PERSONDT_T">
    6 <xsd:sequence>
    7 <xsd:element name="persondetails" type="persondetailsType"/>
    8 <xsd:element name="companyinfo" type="companyinfoType"/>
    9 <xsd:element name="salaryinfo" type="salaryinfoType"/>
    10 </xsd:sequence>
    11 </xsd:complexType>
    12 <xsd:complexType name="persondetailsType" xdb:SQLType="PERSONDETAILS_T">
    13 <xsd:sequence>
    14 <xsd:element name="personname" type="xsd:string" />
    15 <xsd:element name="personexperience" type="xsd:decimal" />
    16 </xsd:sequence>
    17 </xsd:complexType>
    18 <xsd:complexType name="companyinfoType" xdb:SQLType="COMPANYINFO_T">
    19 <xsd:sequence>
    20 <xsd:element name="companystartdate" type="xsd:date" />
    21 <xsd:element name="companystandard" type="xsd:decimal" />
    22 </xsd:sequence>
    23 </xsd:complexType>
    24 <xsd:complexType name="salaryinfoType" xdb:SQLType="SALARYINFO_T">
    25 <xsd:sequence>
    26 <xsd:element name="salary" type="xsd:decimal" />
    27 <xsd:element name="paymonth" type="xsd:string" />
    28 </xsd:sequence>
    29 </xsd:complexType>
    30 <xsd:element name="person" type="t_person" />
    31 </xsd:schema>');
    32 begin
    33 if (dbms_xdb.existsResource('/public/personDetails.xsd')) then
    34 dbms_xdb.deleteResource('/public/personDetails.xsd');
    35 end if;
    36 res := dbms_xdb.createResource('/public/personDetails.xsd',xmlschema);
    37 end;
    38 /
    PL/SQL procedure successfully completed.
    SQL> begin
    2 dbms_xmlschema.registerSchema ('www.PersonInfoUrl.com',xdburitype('/public/personDetails.xsd'),TRUE,TRUE,FALSE,TRUE);
    3 end;
    4 /
    PL/SQL procedure successfully completed.
    SQL> CREATE TABLE PERSON_COMP_TABLE
    2 (empId VARCHAR2(100) CONSTRAINT pk_PERSONCOMP PRIMARY KEY
    3 ,comments VARCHAR2(20)
    4 ,joindate DATE
    5 ,personjoininfo xmltype)
    6 XMLTYPE COLUMN personjoininfo XMLSCHEMA "www.PersonInfoUrl.com" element "person"
    7 /
    Table created.
    SQL> insert into PERSON_COMP_TABLE (empId ,comments ,joindate ,personjoininfo )
    2 values ('2006NEW312','RDDEPT','15-jan-2006',
    3 sys.XMLType.createXML(
    4 '<?xml version="1.0" encoding="UTF-8"?>
    5 <person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="www.PersonInfoUrl.com">
    6 <persondetails>
    7 <personname>Robert </personname>
    8 <personexperience>4.5</personexperience>
    9 </persondetails>
    10 <companyinfo>
    11 <companystartdate>2004-07-24</companystartdate>
    12 <companystandard>3.9</companystandard>
    13 </companyinfo>
    14 <salaryinfo>
    15 <salary>2444.3</salary>
    16 <paymonth> june </paymonth>
    17 </salaryinfo>
    18 </person>'))
    19 /
    1 row created.
    SQL> select count(*) from PERSON_COMP_TABLE;
    COUNT(*)
    1
    SQL> declare
    xmlschema xmltype := xdburitype('/public/personDetails.xsd').getXML();
    res boolean;
    begin
    select insertChildXML(
    xmlschema,
    '/xsd:schema/xsd:complexType[@name="companyinfo"]/xsd:sequence',
    'xsd:element',
    xmltype('<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="address" type="xsd:string"
    'xmlns:xsd="http://www.w3.org/2001/XMLSchema"'
    into xmlSchema
    from dual;
    if (dbms_xdb.existsResource('/public/personDetails.xsd')) then
    dbms_xdb.deleteResource('/public/personDetails.xsd');
    end if;
    res := dbms_xdb.createResource('/public/newpersonDetails.xsd',xmlschema);
    end;
    PL/SQL procedure successfully completed.
    Elapsed: 00:00:00.74
    SQL> commit;
    Commit complete.
    Elapsed: 00:00:00.56
    SQL> begin
    dbms_xmlschema.CopyEvolve
    xdb$string_list_t('www.PersonInfoUrl.com'),
    XMLSequenceType(xdburitype('/public/newpersonDetails.xsd').getXML()),
    null
    end;
    PL/SQL procedure successfully completed.
    Elapsed: 00:00:08.49
    SQL> commit;
    Commit complete.
    Elapsed: 00:00:00.52
    SQL> select count(*) from PERSON_COMP_TABLE;
    COUNT(*)
    1
    SQL> insert into PERSON_COMP_TABLE (empId ,comments ,joindate ,personjoininfo )
    values ('1234PTR','DTSDDEPT','12-jan-2006',
    sys.XMLType.createXML(
    '<?xml version="1.0" encoding="UTF-8"?>
    <person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="www.PersonInfoUrl.com">
    <persondetails>
    <personname>Julie </personname>
    <personexperience>3.5</personexperience>
    </persondetails>
    <companyinfo>
    <companystartdate>2005-11-21</companystartdate>
    <companystandard>3.9</companystandard>
    <address>santaclara</address>
    </companyinfo>
    <salaryinfo>
    <salary>2444.3</salary>
    <paymonth> june </paymonth>
    </salaryinfo>
    </person>'))
    1 row created.
    SQL> select count(*) from PERSON_COMP_TABLE;
    COUNT(*)
    2
    SQL> SELECT empid, extractValue(personjoininfo,'/person/companyinfo/address') FROM PERSON_COMP_TABLE
    2 /
    empid
    E
    1234PTR
    Here "address " is not returned. it has return the value "santaclara".
    How to solve this ?. Please advise
    Thanks
    Govinda

    After chasing down couple of silly mistakes I was able to get your example to work
    SQL> call dbms_xmlschema.deleteSchema ('www.PersonInfoUrl.com',4)
      2  /
    Call completed.
    SQL> declare
      2    res boolean;
      3    xmlschema xmltype := xmltype(
      4  '<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xdb="http://xmlns.oracle.com/xdb">
      5     <xsd:complexType name="t_person" xdb:SQLType="PERSONDT_T">
      6             <xsd:sequence>
      7                     <xsd:element name="persondetails" type="persondetailsType"/>
      8                     <xsd:element name="companyinfo" type="companyinfoType"/>
      9                     <xsd:element name="salaryinfo" type="salaryinfoType"/>
    10             </xsd:sequence>
    11     </xsd:complexType>
    12     <xsd:complexType name="persondetailsType" xdb:SQLType="PERSONDETAILS_T">
    13             <xsd:sequence>
    14                     <xsd:element name="personname" type="xsd:string"/>
    15                     <xsd:element name="personexperience" type="xsd:decimal"/>
    16             </xsd:sequence>
    17     </xsd:complexType>
    18     <xsd:complexType name="companyinfoType" xdb:SQLType="COMPANYINFO_T">
    19             <xsd:sequence>
    20                     <xsd:element name="companystartdate" type="xsd:date"/>
    21                     <xsd:element name="companystandard" type="xsd:decimal"/>
    22             </xsd:sequence>
    23     </xsd:complexType>
    24     <xsd:complexType name="salaryinfoType" xdb:SQLType="SALARYINFO_T">
    25             <xsd:sequence>
    26                     <xsd:element name="salary" type="xsd:decimal"/>
    27                     <xsd:element name="paymonth" type="xsd:string"/>
    28             </xsd:sequence>
    29     </xsd:complexType>
    30     <xsd:element name="person" type="t_person"/>
    31  </xsd:schema>');
    32  begin
    33    if (dbms_xdb.existsResource('/public/personDetails.xsd')) then
    34      dbms_xdb.deleteResource('/public/personDetails.xsd');
    35    end if;
    36    res := dbms_xdb.createResource('/public/personDetails.xsd',xmlschema);
    37  end;
    38  /
    PL/SQL procedure successfully completed.
    SQL> begin
      2    dbms_xmlschema.registerSchema ('www.PersonInfoUrl.com',xdburitype('/public/personDetails.xsd'),TRUE,TRUE,FALSE,TRUE);
      3  end;
      4  /
    PL/SQL procedure successfully completed.
    SQL> DROP TABLE PERSON_COMP_TABLE
      2  /
    Table dropped.
    SQL> CREATE TABLE PERSON_COMP_TABLE
      2  (
      3    empId VARCHAR2(100) CONSTRAINT pk_PERSONCOMP PRIMARY KEY
      4    ,comments VARCHAR2(20)
      5    ,joindate DATE
      6    ,personjoininfo xmltype
      7  )
      8  XMLTYPE COLUMN personjoininfo XMLSCHEMA "www.PersonInfoUrl.com" element "person"
      9  /
    Table created.
    SQL> insert into PERSON_COMP_TABLE (empId ,comments ,joindate ,personjoininfo )
      2  values ('2006NEW312','RDDEPT','15-jan-2006',
      3  XMLType(
      4  '<?xml version="1.0" encoding="UTF-8"?>
      5  <person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="www.PersonInfoUrl.com">
      6     <persondetails>
      7             <personname>Robert </personname>
      8             <personexperience>4.5</personexperience>
      9     </persondetails>
    10     <companyinfo>
    11             <companystartdate>2004-07-24</companystartdate>
    12             <companystandard>3.9</companystandard>
    13     </companyinfo>
    14     <salaryinfo>
    15             <salary>2444.3</salary>
    16             <paymonth> june </paymonth>
    17     </salaryinfo>
    18  </person>'))
    19  /
    1 row created.
    SQL> select count(*) from PERSON_COMP_TABLE
      2  /
      COUNT(*)
             1
    SQL> declare
      2    xmlschema xmltype := xdburitype('/public/personDetails.xsd').getXML();
      3    res boolean;
      4  begin
      5    select insertChildXML
      6           (
      7             xmlschema,
      8             '/xsd:schema/xsd:complexType[@name="companyinfoType"]/xsd:sequence',
      9             'xsd:element',
    10             xmltype('<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="address" type="xsd:string"/>'),
    11             'xmlns:xsd="http://www.w3.org/2001/XMLSchema"'
    12           )
    13      into xmlSchema
    14      from dual;
    15
    16    if (dbms_xdb.existsResource('/public/newPersonDetails.xsd')) then
    17      dbms_xdb.deleteResource('/public/newPersonDetails.xsd');
    18    end if;
    19
    20    res := dbms_xdb.createResource('/public/newPersonDetails.xsd',xmlschema);
    21  end;
    22  /
    PL/SQL procedure successfully completed.
    SQL> commit
      2  /
    Commit complete.
    SQL> begin
      2    dbms_xmlschema.CopyEvolve
      3    (
      4       xdb$string_list_t('www.PersonInfoUrl.com'),
      5       XMLSequenceType(xdburitype('/public/newPersonDetails.xsd').getXML()),
      6       null
      7     );
      8  end;
      9  /
    PL/SQL procedure successfully completed.
    SQL> select count(*) from PERSON_COMP_TABLE
      2  /
      COUNT(*)
             1
    SQL> insert into PERSON_COMP_TABLE (empId ,comments ,joindate ,personjoininfo )
      2  values ('1234PTR','DTSDDEPT','12-jan-2006',
      3  XMLType(
      4  '<?xml version="1.0" encoding="UTF-8"?>
      5  <person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="www.PersonInfoUrl.com">
      6     <persondetails>
      7             <personname>Julie </personname>
      8             <personexperience>3.5</personexperience>
      9     </persondetails>
    10     <companyinfo>
    11             <companystartdate>2005-11-21</companystartdate>
    12             <companystandard>3.9</companystandard>
    13             <address>santaclara</address>
    14     </companyinfo>
    15     <salaryinfo>
    16             <salary>2444.3</salary>
    17             <paymonth> june </paymonth>
    18     </salaryinfo>
    19  </person>'))
    20  /
    1 row created.
    SQL> commit
      2  /
    Commit complete.
    SQL> select count(*) from PERSON_COMP_TABLE
      2  /
      COUNT(*)
             2
    SQL> SELECT empid, extractValue(personjoininfo,'/person/companyinfo/address') FROM PERSON_COMP_TABLE
      2  /
    EMPID
    EXTRACTVALUE(PERSONJOININFO,'/PERSON/COMPANYINFO/ADDRESS')
    2006NEW312
    1234PTR
    santaclara
    SQL>The mistakes included the XPath used to insert the new element into the XML Schema
    You had
    '/xsd:schema/xsd:complexType[@name="companyinfo"]/xsd:sequence',
    where as the correct XPath is
    '/xsd:schema/xsd:complexType[@name="companyinfoType"]/xsd:sequence',
    and then you had
    if (dbms_xdb.existsResource('/public/personDetails.xsd')) then
    dbms_xdb.deleteResource('/public/personDetails.xsd');
    end if;
    res := dbms_xdb.createResource('/public/newpersonDetails.xsd',xmlschema);
    end;
    which means that once the document newpersonDetails.xsd had been created once a subsequent execution of the testcase would fail as the document would already exist.
    I'm also a little confused... Your testcase implies that you were able to insert the second document, but the number of rows in the table is still shown as 1 after the insert apparently succeeded. Since you did not correctly update the XML Schema before the calling copyEvolve I do not understand how your output shows that the second insert succeeded.

  • Copyevolve error

    Hello I allways get a:
    ERROR at line 1:
    ORA-30942: XML Schema Evolution error for schema
    'http://xmlns.oracle.com/xdb/person.xsd' table "CMS"."PERSON" column ''
    ORA-06502: PL/SQL: numeric or value error
    ORA-06512: at "SYS.XMLTYPE", line 254
    ORA-06512: at line 1
    ORA-06512: at "XDB.DBMS_XMLSCHEMA_INT", line 113
    ORA-06512: at "XDB.DBMS_XMLSCHEMA", line 210
    ORA-06512: at line 2
    Here are the details:
    DB:
    Connected to:
    Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
    With the Partitioning, OLAP and Data Mining options
    The old Schema Person.xsd:
    <?xml version="1.0" encoding="utf-8"?>
    <xsd:schema targetNamespace="http://xmlns.oracle.com/xdb/Person"
    xmlns="http://xmlns.oracle.com/xdb/Person"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xdb="http://xmlns.oracle.com/xdb"
    elementFormDefault="qualified"
    version="1.0">
    <xsd:element name="Person" type="PersonType" xdb:defaultTable="PERSON" />
    <xsd:complexType name="PersonType">
    <xsd:sequence>
    <xsd:element name="Name" type="xsd:string" />
    <xsd:element name="Vorname" type="xsd:string" />
    <xsd:element name="Hobbies" type="HobbiesType" />
    </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="HobbiesType">
    <xsd:sequence>
    <xsd:element maxOccurs="unbounded" name="Hobby" type="xsd:string" />
    </xsd:sequence>
    </xsd:complexType>
    </xsd:schema>
    An registered Resource of the Schema:
    <?xml version="1.0" encoding="UTF-8"?>
    <Person xmlns="http://xmlns.oracle.com/xdb/Person"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.oracle.com/xdb/Person http://xmlns.oracle.com/xdb/person.xsd">
    <Name>Neubert</Name>
    <Vorname>Jens</Vorname>
    <Hobbies>
    <Hobby>Tanzen</Hobby>
    <Hobby>Lesen</Hobby>
    </Hobbies>
    </Person>
    the new Schema Person2.xsd:
    <?xml version="1.0" encoding="utf-8"?>
    <xsd:schema targetNamespace="http://xmlns.oracle.com/xdb/Person"
    xmlns="http://xmlns.oracle.com/xdb/Person"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xdb="http://xmlns.oracle.com/xdb"
    elementFormDefault="qualified"
    version="1.0">
    <xsd:element name="Person" type="PersonType" xdb:defaultTable="PERSON" />
    <xsd:complexType name="PersonType">
    <xsd:sequence>
    <xsd:element name="Name" type="xsd:string" />
    <xsd:element name="Vorname" type="xsd:string" />
    <xsd:element name="Beruf" type="xsd:string" />
    <xsd:element name="Hobbies" type="HobbiesType" />
    </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="HobbiesType">
    <xsd:sequence>
    <xsd:element maxOccurs="unbounded" name="Hobby" type="xsd:string" />
    </xsd:sequence>
    </xsd:complexType>
    </xsd:schema>
    the xslt transformer:
    <?xml version="1.0" encoding="utf-8" ?>
    <xsl:stylesheet version="1.0"
    xmlns:xp20="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20"
    xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:ora="http://schemas.oracle.com/xpath/extension"
    xmlns:ehdr="http://www.oracle.com/XSL/Transform/java/oracle.tip.esb.server.headers.ESBHeaderFunctions"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:orcl="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc"
    xmlns:ids="http://xmlns.oracle.com/bpel/services/IdentityService/xpath"
    xmlns:xdb="http://xmlns.oracle.com/xdb"
    xmlns:hwf="http://xmlns.oracle.com/bpel/workflow/xpath"
    xmlns:ns0="http://xmlns.oracle.com/xdb/Person"
    xmlns="http://xmlns.oracle.com/xdb/Person"
    xmlns:xsi="http://www.w3.org/2001/XMLSxhema-instance"
    exclude-result-prefixes="xsl xsd xdb ns0 xp20 bpws ora ehdr orcl ids hwf">
    <xsl:output method="xml" encoding="utf-8"/>
    <xsl:template match="/">
    <Person xmlns="http://xmlns.oracle.com/xdb/Person"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.oracle.com/xdb/Person
    http://xmlns.oracle.com/xdb/person.xsd"
    >
    <Vorname>
    <xsl:value-of select="/ns0:Person/ns0:Vorname"/>
    </Vorname>
    <Nachname>
    <xsl:value-of select="/ns0:Person/ns0:Name"/>
    </Nachname>
    <Beruf>
    huhu
    </Beruf>
    <Hobbies>
    <xsl:for-each select="/ns0:Person/ns0:Hobbies/ns0:Hobby">
    <Hobby>
    <xsl:value-of select="."/>
    </Hobby>
    </xsl:for-each>
    </Hobbies>
    </Person>
    </xsl:template>
    </xsl:stylesheet>
    the registration of the new schema and the xsl:
    declare
    res boolean;
    begin
         res := DBMS_XDB.createResource('/home/Person2.xsd',
         bfilename('XMLDIR', 'Person2.xsd'),
         nls_charset_id('AL32UTF8'));
         res := DBMS_XDB.createResource('/home/Person.xsl',
         bfilename('XMLDIR', 'Person.xsl'),
         nls_charset_id('AL32UTF8'));
    end;
    the copyevolve call(before that I :
    1 begin
    2 DBMS_XMLSCHEMA.copyEvolve(
    3 xdb$string_list_t('http://xmlns.oracle.com/xdb/person.xsd'),
    4 XMLSequenceType(XDBURIType('/home/Person2.xsd').getXML()),
    5 XMLSequenceType(XDBURIType('/home/Person.xsl').getXML()));
    6* end;
    anyone any ideas ?

    Here's a working example.. I think there were some typos in your original XSL, however after correctly them I still had problems. However with a different (but equivilant) XSL everything appears to work as expected...
    SQL> set echo on
    SQL> spool testcase.log
    SQL> --
    SQL> connect sys/ as sysdba
    Enter password:
    Connected.
    SQL> set define on
    SQL> --
    SQL> define USERNAME = OTNTEST
    SQL> --
    SQL> def PASSWORD = OTNTEST
    SQL> --
    SQL> def USER_TABLESPACE = USERS
    SQL> --
    SQL> def TEMP_TABLESPACE = TEMP
    SQL> --
    SQL> drop user &USERNAME cascade
      2  /
    old   1: drop user &USERNAME cascade
    new   1: drop user OTNTEST cascade
    User dropped.
    SQL> grant connect, resource to &USERNAME identified by &PASSWORD
      2  /
    old   1: grant connect, resource to &USERNAME identified by &PASSWORD
    new   1: grant connect, resource to OTNTEST identified by OTNTEST
    Grant succeeded.
    SQL> grant create any directory, drop any directory to &USERNAME
      2  /
    old   1: grant create any directory, drop any directory to &USERNAME
    new   1: grant create any directory, drop any directory to OTNTEST
    Grant succeeded.
    SQL> grant alter session, create view to &USERNAME
      2  /
    old   1: grant alter session, create view to &USERNAME
    new   1: grant alter session, create view to OTNTEST
    Grant succeeded.
    SQL> alter user &USERNAME default tablespace &USER_TABLESPACE temporary tablespace &TEMP_TABLESPACE
      2  /
    old   1: alter user &USERNAME default tablespace &USER_TABLESPACE temporary tablespace &TEMP_TABLESPACE
    new   1: alter user OTNTEST default tablespace USERS temporary tablespace TEMP
    User altered.
    SQL> connect &USERNAME/&PASSWORD
    Connected.
    SQL> --
    SQL> alter session set events ='19027 trace name context forever, level 0x800'
      2  /
    Session altered.
    SQL> var schemaURL varchar2(256)
    SQL> var docPath varchar2(256)
    SQL> --
    SQL> create or replace directory XMLDIR as 'c:\xdb\otn'
      2  /
    Directory created.
    SQL> begin
      2    :schemaURL := 'http://xmlns.example.com/xdb/person.xsd';
      3    :docPath := '/public/person.xsd';
      4  end;
      5  /
    PL/SQL procedure successfully completed.
    SQL>
    SQL> declare
      2    res boolean;
      3    xmldoc xmlType := xmlType(
      4  '<?xml version="1.0" encoding="utf-8"?>
      5  <xsd:schema targetNamespace="http://xmlns.example.com/xdb/Person"
      6              xmlns="http://xmlns.example.com/xdb/Person"
      7              xmlns:xsd="http://www.w3.org/2001/XMLSchema"
      8              xmlns:xdb="http://xmlns.oracle.com/xdb"
      9              elementFormDefault="qualified"
    10              version="1.0">
    11    <xsd:element name="Person" type="PersonType" xdb:defaultTable="PERSON" />
    12    <xsd:complexType name="PersonType">
    13      <xsd:sequence>
    14        <xsd:element name="Name" type="xsd:string" />
    15        <xsd:element name="Vorname" type="xsd:string" />
    16        <xsd:element name="Hobbies" type="HobbiesType" />
    17      </xsd:sequence>
    18    </xsd:complexType>
    19    <xsd:complexType name="HobbiesType">
    20      <xsd:sequence>
    21        <xsd:element maxOccurs="unbounded" name="Hobby" type="xsd:string" />
    22      </xsd:sequence>
    23    </xsd:complexType>
    24  </xsd:schema>');
    25  begin
    26    if (dbms_xdb.existsResource(:docPath)) then
    27      dbms_xdb.deleteResource(:docPath);
    28    end if;
    29    res := dbms_xdb.createResource(:docPath,xmldoc);
    30  end;
    31  /
    PL/SQL procedure successfully completed.
    SQL> begin
      2    dbms_xmlschema.registerSchema
      3    (
      4      :schemaURL,
      5      xdbURIType(:docPath).getClob(),
      6      TRUE,TRUE,FALSE,TRUE
      7    );
      8  end;
      9  /
    PL/SQL procedure successfully completed.
    SQL> begin
      2    :docPath := '/public/Person2.xsd';
      3  end;
      4  /
    PL/SQL procedure successfully completed.
    SQL> declare
      2    res boolean;
      3    xmldoc xmlType := xmlType(
      4  '<?xml version="1.0" encoding="utf-8"?>
      5  <xsd:schema targetNamespace="http://xmlns.example.com/xdb/Person"
      6              xmlns="http://xmlns.example.com/xdb/Person"
      7              xmlns:xsd="http://www.w3.org/2001/XMLSchema"
      8              xmlns:xdb="http://xmlns.oracle.com/xdb"
      9              elementFormDefault="qualified"
    10              version="1.0">
    11    <xsd:element name="Person" type="PersonType" xdb:defaultTable="PERSON" />
    12    <xsd:complexType name="PersonType">
    13      <xsd:sequence>
    14        <xsd:element name="Name" type="xsd:string" />
    15        <xsd:element name="Vorname" type="xsd:string" />
    16        <xsd:element name="Beruf" type="xsd:string" />
    17        <xsd:element name="Hobbies" type="HobbiesType" />
    18      </xsd:sequence>
    19    </xsd:complexType>
    20    <xsd:complexType name="HobbiesType">
    21      <xsd:sequence>
    22        <xsd:element maxOccurs="unbounded" name="Hobby" type="xsd:string" />
    23      </xsd:sequence>
    24    </xsd:complexType>
    25  </xsd:schema>');
    26  begin
    27    if (dbms_xdb.existsResource(:docPath)) then
    28      dbms_xdb.deleteResource(:docPath);
    29    end if;
    30    res := dbms_xdb.createResource(:docPath,xmldoc);
    31  end;
    32  /
    PL/SQL procedure successfully completed.
    SQL> begin
      2    :docPath := '/public/Person.xml';
      3  end;
      4  /
    PL/SQL procedure successfully completed.
    SQL> declare
      2    res boolean;
      3    xmldoc xmltype := xmltype(
      4  '<?xml version="1.0" encoding="UTF-8"?>
      5  <Person xmlns="http://xmlns.example.com/xdb/Person"
      6          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      7          xsi:schemaLocation="http://xmlns.example.com/xdb/Person http://xmlns.example.com/xdb/person.xsd">
      8    <Name>Neubert</Name>
      9    <Vorname>Jens</Vorname>
    10    <Hobbies>
    11      <Hobby>Tanzen</Hobby>
    12      <Hobby>Lesen</Hobby>
    13    </Hobbies>
    14  </Person>');
    15  begin
    16    if (dbms_xdb.existsResource(:docPath)) then
    17      dbms_xdb.deleteResource(:docPath);
    18    end if;
    19    res := dbms_xdb.createResource(:docPath,xmldoc);
    20  end;
    21  /
    PL/SQL procedure successfully completed.
    SQL> set long 100000 pages 0 lines 150
    SQL> --
    SQL> select *
      2    from PERSON
      3  /
    <?xml version="1.0" encoding="WINDOWS-1252"?>
    <Person xmlns="http://xmlns.example.com/xdb/Person" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.e
    xample.com
    /xdb/Person http://xmlns.example.com/xdb/person.xsd">
      <Name>Neubert</Name>
      <Vorname>Jens</Vorname>
      <Hobbies>
        <Hobby>Tanzen</Hobby>
        <Hobby>Lesen</Hobby>
      </Hobbies>
    </Person>
    SQL> commit
      2  /
    Commit complete.
    SQL> begin
      2    :docPath := '/public/Person.xsl';
      3  end;
      4  /
    PL/SQL procedure successfully completed.
    SQL> declare
      2    res boolean;
      3    xmldoc xmlType := xmlType(
      4  '<?xml version="1.0" encoding="utf-8" ?>
      5  <xsl:stylesheet version="1.0"
      6                  xmlns:xp20="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20"
      7                  xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/"
      8                  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      9                  xmlns:ora="http://schemas.oracle.com/xpath/extension"
    10                  xmlns:ehdr="http://www.oracle.com/XSL/Transform/java/oracle.tip.esb.server.headers.ESBHeaderFunctions"
    11                  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    12                  xmlns:orcl="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc"
    13                  xmlns:ids="http://xmlns.oracle.com/bpel/services/IdentityService/xpath"
    14                  xmlns:xdb="http://xmlns.oracle.com/xdb"
    15                  xmlns:hwf="http://xmlns.oracle.com/bpel/workflow/xpath"
    16                  xmlns:ns0="http://xmlns.example.com/xdb/Person"
    17                  xmlns="http://xmlns.example.com/xdb/Person"
    18                  xmlns:xsi="http://www.w3.org/2001/XMLSxhema-instance"
    19                  exclude-result-prefixes="xsl xsd xdb ns0 xp20 bpws ora ehdr orcl ids hwf">
    20                  <xsl:output method="xml" encoding="utf-8"/>
    21    <xsl:template match="/">
    22      <Person xmlns="http://xmlns.example.com/xdb/Person"
    23      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    24               xsi:schemaLocation="http://xmlns.example.com/xdb/Person http://xmlns.example.com/xdb/person.xsd">
    25        <Vorname>
    26          <xsl:value-of select="/ns0:Person/ns0:Vorname"/>
    27        </Vorname>
    28        <Nachname>
    29          <xsl:value-of select="/ns0:Person/ns0:Name"/>
    30        </Nachname>
    31        <Beruf>
    32        huhu
    33        </Beruf>
    34        <Hobbies>
    35          <xsl:for-each select="/ns0:Person/ns0:Hobbies/ns0:Hobby">
    36            <Hobby>
    37              <xsl:value-of select="."/>
    38            </Hobby>
    39          </xsl:for-each>
    40        </Hobbies>
    41      </Person>
    42    </xsl:template>
    43  </xsl:stylesheet>');
    44  begin
    45    if (dbms_xdb.existsResource(:docPath)) then
    46      dbms_xdb.deleteResource(:docPath);
    47    end if;
    48    res := dbms_xdb.createResource(:docPath,xmldoc);
    49  end;
    50  /
    PL/SQL procedure successfully completed.
    SQL> select xmltransform(object_value,xdburitype('/public/Person.xsl').getXML())
      2    from PERSON
      3  /
    SQL> declare
      2    res boolean;
      3    xmldoc xmlType := xmlType(
      4  '<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      5                   xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:n1="http://xmlns.example.com/xdb/Person" xmlns="http://xmlns.example
    .com/xdb/Person" xmlns:xdb="http://xmlns.oracle.com/xdb">
      6             <xsl:output method="xml" encoding="UTF-8" indent="yes"/>
      7             <xsl:template match="/n1:Person">
      8                     <Person>
      9                             <xsl:attribute name="xsi:schemaLocation">http://xmlns.example.com/xdb/Person http://xmlns.example.com/xdb/pe
    rson.xsd</xsl:attribute>
    10                             <xsl:for-each select="n1:Name">
    11                                     <Name>
    12                                             <xsl:value-of select="."/>
    13                                     </Name>
    14                             </xsl:for-each>
    15                             <xsl:for-each select="n1:Vorname">
    16                                     <Vorname>
    17                                             <xsl:value-of select="."/>
    18                                     </Vorname>
    19                             </xsl:for-each>
    20                             <Beruf>huhu</Beruf>
    21                             <Hobbies>
    22                                     <xsl:for-each select="n1:Hobbies">
    23                                             <xsl:for-each select="n1:Hobby">
    24                                                     <Hobby>
    25                                                             <xsl:value-of select="."/>
    26                                                     </Hobby>
    27                                             </xsl:for-each>
    28                                     </xsl:for-each>
    29                             </Hobbies>
    30                     </Person>
    31             </xsl:template>
    32     </xsl:stylesheet>');
    33  begin
    34    if (dbms_xdb.existsResource(:docPath)) then
    35      dbms_xdb.deleteResource(:docPath);
    36    end if;
    37    res := dbms_xdb.createResource(:docPath,xmldoc);
    38  end;
    39  /
    PL/SQL procedure successfully completed.
    SQL> select xmltransform(object_value,xdburitype('/public/Person.xsl').getXML())
      2    from PERSON
      3  /
    <?xml version="1.0" encoding="WINDOWS-1252"?>
    <Person xmlns="http://xmlns.example.com/xdb/Person" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/X
    MLSchema"
    xmlns:n1="http://xmlns.example.com/xdb/Person" xmlns:xdb="http://xmlns.oracle.com/xdb" xsi:schemaLocation="http://xmlns.example.com/xdb/Pers
    on http://
    xmlns.example.com/xdb/person.xsd">
      <Name>Neubert</Name>
      <Vorname>Jens</Vorname>
      <Beruf>huhu</Beruf>
      <Hobbies>
        <Hobby>Tanzen</Hobby>
        <Hobby>Lesen</Hobby>
      </Hobbies>
    </Person>
    SQL> begin
      2    DBMS_XMLSCHEMA.copyEvolve
      3                   (
      4                     xdb$string_list_t('http://xmlns.example.com/xdb/person.xsd'),
      5                     XMLSequenceType(XDBURIType('/public/Person2.xsd').getXML()),
      6                     XMLSequenceType(XDBURIType('/public/Person.xsl').getXML()));
      7  end;
      8  /
    PL/SQL procedure successfully completed.
    SQL> select *
      2    from PERSON
      3  /
    <?xml version="1.0" encoding="WINDOWS-1252"?>
    <Person xmlns="http://xmlns.example.com/xdb/Person" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/X
    MLSchema"
    xmlns:n1="http://xmlns.example.com/xdb/Person" xmlns:xdb="http://xmlns.oracle.com/xdb" xsi:schemaLocation="http://xmlns.example.com/xdb/Pers
    on http://
    xmlns.example.com/xdb/person.xsd">
      <Name>Neubert</Name>
      <Vorname>Jens</Vorname>
      <Beruf>huhu</Beruf>
      <Hobbies>
        <Hobby>Tanzen</Hobby>
        <Hobby>Lesen</Hobby>
      </Hobbies>
    </Person>
    SQL>
    SQL>

  • Where is CopyEvolve trying to create the mapping table?

    SQL*Plus: Release 10.2.0.1.0
    Connected to:
    Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production
    With the Partitioning and Data Mining options
    I am trying to use DBMS_XMLSCHEMA.copyEvolve .
    ORA-30945: Could not create mapping table 'XDB$MAPTAB481'
    ORA-01031: insufficient privileges
    I can create a table in my own schema. I am left to assume copyEvolve is trying to create the table someplace else, but where?
    The oracle docs say "If there are schema-based XMLType tables or columns in other database schemas, you need privileges such as the following: CREATE ANY TABLE" I have CREATE TABLE but not CREATE ANY TABLE (and have little hope of getting it from our DBAs!) but I didn't think this would be an issue since the XML schema I am trying to evolve is only used by an object in my schema. Anyone have any idea what privilige it is that I am missing?
    Thanks,
    ggb

    Hi,
    There is a LastActiveTime column in collection views(such as dbo._RES_COLL_SMS00001).
    It records the date of last communication.
    Best Regards,
    Joyce Li
    We
    are trying to better understand customer views on social support experience, so your participation in this
    interview project would be greatly appreciated if you have time.
    Thanks for helping make community forums a great place.

  • Problem in XSD and XSLT

    Actually I have a problem relating to Oracle 10g XML DB. I’ll explain the scenario.
    1.     First an xml file needs to be loaded into the database( after registering the schema)
    2.     Later maybe after inserting suppose 10 xml files into the table, I need to add an element in the xml.
    3. And the new xml's which are later loaded will have that additional field coming in. so how should I go about from here.
    What I’ve thought is:
    1.     Generate a new XSD schema (don’t know how to generate this automatically), implementing the additional field change.(can u help me in this)
    2.     Create a new XSL depending on the new XSD schema (don’t know how to generate this automatically). (can u help me in this)
    3.     apply the new xsl to the original xml to get the new xml.
    4.     in the meantime, keep the old xml in a temporary tables, and later, update those xml corresponding to the new schema (can u help me in this)
    I don’t know if this a correct procedure, if in case, there is a different and an easy method to do it, please let me know.
    regards,
    athar

    Does the following help
    SQL> set long 10000 pages 50
    SQL> --
    SQL> declare
      2    res boolean;
      3    xmlschema xmltype := xmltype(
      4  '<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xdb="http://x
      5     <xsd:complexType name="T_person" xdb:SQLType="PERSON_T">
      6       <xsd:all>
      7         <xsd:element name="first_name" type="xsd:string" />
      8         <xsd:element name="last_name" type="xsd:string" />
      9         <xsd:element name="birth_day" type="xsd:date" />
    10       </xsd:all>
    11       <xsd:attribute name="employee_id" type="xsd:positiveInteger" />
    12     </xsd:complexType>
    13     <xsd:element name="person" type="T_person" xdb:defaultTable="XML_LOAD"/>
    14  </xsd:schema>');
    15  begin
    16    if (dbms_xdb.existsResource('/public/testcase.xsd')) then
    17      dbms_xdb.deleteResource('/public/testcase.xsd');
    18    end if;
    19    res := dbms_xdb.createResource('/public/testcase.xsd',xmlschema);
    20  end;
    21  /
    PL/SQL procedure successfully completed.
    SQL> call dbms_xmlschema.deleteSchema('www.WMDurl.com',4)
      2  /
    Call completed.
    SQL> begin
      2    dbms_xmlschema.registerSchema ('www.WMDurl.com',xdburitype('/public/testcas
      3  end;
      4  /
    PL/SQL procedure successfully completed.
    SQL> desc XML_LOAD
    Name                                      Null?    Type
    TABLE of SYS.XMLTYPE(XMLSchema "www.WMDurl.com" Element "person") STORAGE Object-r
    SQL> --
    SQL> desc PERSON_T
    PERSON_T is NOT FINAL
    Name                                      Null?    Type
    SYS_XDBPD$                                         XDB.XDB$RAW_LIST_T
    employee_id                                        NUMBER(38)
    first_name                                         VARCHAR2(4000 CHAR)
    last_name                                          VARCHAR2(4000 CHAR)
    birth_day                                          DATE
    SQL> --
    SQL> insert into xml_load values (xmltype(
      2  '<person employee_id="1">
      3     <first_name>mark</first_name>
      4     <last_name>drake</last_name>
      5     <birth_day>2006-01-31</birth_day>
      6   </person>'
      7  ))
      8  /
    1 row created.
    SQL> commit
      2  /
    Commit complete.
    SQL> set long 10000
    SQL> --
    SQL> select * from xml_load
      2  /
    SYS_NC_ROWINFO$
    <person employee_id="1">
      <first_name>mark</first_name>
      <last_name>drake</last_name>
      <birth_day>2006-01-31</birth_day>
    </person>
    SQL> insert into xml_load values (xmltype(
      2  '<person employee_id="1">
      3     <first_name>barney</first_name>
      4     <last_name>rubble</last_name>
      5     <birth_day>2006-01-31</birth_day>
      6     <address>Bedrock</address>
      7   </person>'
      8  ))
      9  /
    insert into xml_load values (xmltype(
    ERROR at line 1:
    ORA-30937: No schema definition for 'address' (namespace '##local') in parent
    '/person'
    SQL> commit
      2  /
    Commit complete.
    SQL> set long 10000
    SQL> --
    SQL> select * from xml_load
      2  /
    SYS_NC_ROWINFO$
    <person employee_id="1">
      <first_name>mark</first_name>
      <last_name>drake</last_name>
      <birth_day>2006-01-31</birth_day>
    </person>
    SQL> select xdbUriType('/public/testcase.xsd').getXML()
      2    from dual
      3  /
    XDBURITYPE('/PUBLIC/TESTCASE.XSD').GETXML()
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xdb="http://xmlns
    .oracle.com/xdb">
      <xsd:complexType name="T_person" xdb:SQLType="PERSON_T">
        <xsd:all>
          <xsd:element name="first_name" type="xsd:string"/>
          <xsd:element name="last_name" type="xsd:string"/>
          <xsd:element name="birth_day" type="xsd:date"/>
        </xsd:all>
        <xsd:attribute name="employee_id" type="xsd:positiveInteger"/>
      </xsd:complexType>
      <xsd:element name="person" type="T_person" xdb:defaultTable="XML_LOAD"/>
    </xsd:schema>
    SQL> declare
      2    xmlschema xmltype := xdburitype('/public/testcase.xsd').getXML();
      3    res boolean;
      4  begin
      5    select insertChildXML
      6           (
      7             xmlschema,
      8             '/xsd:schema/xsd:complexType[@name="T_person"]/xsd:all',
      9             'xsd:element',
    10             xmltype('<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    11             'xmlns:xsd="http://www.w3.org/2001/XMLSchema"'
    12           )
    13      into xmlSchema
    14      from dual;
    15    if (dbms_xdb.existsResource('/public/newTestcase.xsd')) then
    16      dbms_xdb.deleteResource('/public/newTestcase.xsd');
    17    end if;
    18    res := dbms_xdb.createResource('/public/newTestcase.xsd',xmlschema);
    19  end;
    20  /
    PL/SQL procedure successfully completed.
    SQL> select xdbUriType('/public/newTestcase.xsd').getXML()
      2    from dual
      3  /
    XDBURITYPE('/PUBLIC/NEWTESTCASE.XSD').GETXML()
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xdb="http://xmlns
    .oracle.com/xdb">
      <xsd:complexType name="T_person" xdb:SQLType="PERSON_T">
        <xsd:all>
          <xsd:element name="first_name" type="xsd:string"/>
          <xsd:element name="last_name" type="xsd:string"/>
          <xsd:element name="birth_day" type="xsd:date"/>
          <xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="address" t
    ype="xsd:string"/>
        </xsd:all>
        <xsd:attribute name="employee_id" type="xsd:positiveInteger"/>
      </xsd:complexType>
      <xsd:element name="person" type="T_person" xdb:defaultTable="XML_LOAD"/>
    </xsd:schema>
    SQL> begin
      2    dbms_xmlschema.CopyEvolve
      3    (
      4       xdb$string_list_t('www.WMDurl.com'),
      5       XMLSequenceType(xdburitype('/public/newTestcase.xsd').getXML()),
      6       null
      7    );
      8  end;
      9  /
    PL/SQL procedure successfully completed.
    SQL> desc XML_LOAD
    Name                                      Null?    Type
    TABLE of SYS.XMLTYPE(XMLSchema "www.WMDurl.com" Element "person") STORAGE Object-r
    SQL> --
    SQL> desc PERSON_T
    PERSON_T is NOT FINAL
    Name                                      Null?    Type
    SYS_XDBPD$                                         XDB.XDB$RAW_LIST_T
    employee_id                                        NUMBER(38)
    first_name                                         VARCHAR2(4000 CHAR)
    last_name                                          VARCHAR2(4000 CHAR)
    birth_day                                          DATE
    address                                            VARCHAR2(4000 CHAR)
    SQL> --
    SQL> insert into xml_load values (xmltype(
      2  '<person employee_id="2">
      3     <first_name>barney</first_name>
      4     <last_name>rubble</last_name>
      5     <birth_day>2006-01-31</birth_day>
      6     <address>Bedrock</address>
      7   </person>'
      8  ))
      9  /
    1 row created.
    SQL> commit
      2  /
    Commit complete.
    SQL> set long 10000
    SQL> --
    SQL> select * from xml_load
      2  /
    SYS_NC_ROWINFO$
    <person employee_id="1">
      <first_name>mark</first_name>
      <last_name>drake</last_name>
      <birth_day>2006-01-31</birth_day>
    </person>
    <person employee_id="2">
      <first_name>barney</first_name>
      <last_name>rubble</last_name>
      <birth_day>2006-01-31</birth_day>
      <address>Bedrock</address>
    </person>
    SQL> update XML_LOAD
      2     set object_value = insertChildXML
      3                        (
      4                          object_value,
      5                          '/person',
      6                          'address',
      7                          xmltype('<address/>')
      8                        )
      9   where existsNode(object_value,'/person/address') = 0
    10  /
    1 row updated.
    SQL> commit
      2  /
    Commit complete.
    SQL> select * from xml_load
      2  /
    SYS_NC_ROWINFO$
    <person employee_id="1">
      <first_name>mark</first_name>
      <last_name>drake</last_name>
      <birth_day>2006-01-31</birth_day>
      <address/>
    </person>
    <person employee_id="2">
      <first_name>barney</first_name>
      <last_name>rubble</last_name>
      <birth_day>2006-01-31</birth_day>
      <address>Bedrock</address>
    </person>

  • Unable to insert subheader in insertchildxml but   oracle says no error

    Hi ,
    I am unable insert subheader using insertchildxml().
    Here is the code that I am working on
    SQL> declare xmlschema xmltype := xdburitype('/public/personDetails.xsd').getXML(); res boolean; begin select insertChildXML( xmlschema,'/xsd:schema/xsd:complexType[@name="HomecompanyinfoType"]/xsd:sequence', 'xsd:element',xmltype('<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="Ofiiceddress" type="xsd:string"/>'),'xmlns:xsd="http://www.w3.org/2001/XMLSchema"') into xmlSchema from dual; if (dbms_xdb.existsResource('/public/personDetails.xsd')) then dbms_xdb.deleteResource('/public/personDetails.xsd'); end if; res := dbms_xdb.createResource('/public/personDetails.xsd',xmlschema); end;
    2 /
    PL/SQL procedure successfully completed.
    SQL> commit;
    Commit complete.
    SQL> begin dbms_xmlschema.CopyEvolve(xdb$string_list_t('www.PersonInfoUrl.com'),XMLSequenceType(xdburitype('/public/personDetails.xsd').getXML()), null); end;
    2 /
    PL/SQL procedure successfully completed.
    SQL> commit;
    Commit complete.
    //above I have added the "HomecompanyinfoType" as new subheader
    "Officeaddress" is the new tagfield under this new subheader
    SQL>
    SQL>
    SQL> insert into PERSON_COMP_TABLE (empId ,comments ,joindate ,personjoininfo )
    2 values ('100SP23','RDDEPT','15-jan-2006',
    3 XMLType(
    4 '<?xml version="1.0" encoding="UTF-8"?>
    5 <person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="www.PersonInfoUrl.com">
    6 <persondetails>
    7 <personname>Robert </personname>
    8 <personexperience>4.5</personexperience>
    9 </persondetails>
    10 <HomecompanyinfoType>
    11 <Ofiiceddress>SLStreet</Ofiiceddress>
    12 </HomecompanyinfoType>
    13 <companyinfo>
    14 <companystartdate>2004-07-24</companystartdate>
    15 <companystandard>3.9</companystandard>
    16 <address>SLStreet<address>
    17 </companyinfo>
    18 <salaryinfo>
    19 <salary>2444.3</salary>
    20 <paymonth> june </paymonth>
    21 </salaryinfo>
    22 </person>'))
    23 /
    XMLType(
    ERROR at line 3:
    ORA-31011: XML parsing failed
    ORA-19202: Error occurred in XML processing
    LPX-00225: end-element tag "companyinfo" does not match start-element tag
    "address"
    Error at line 14
    ORA-06512: at "SYS.XMLTYPE", line 301
    ORA-06512: at line 1
    // But I am able to add the old data without new sub header
    SQL> insert into PERSON_COMP_TABLE (empId ,comments ,joindate ,personjoininfo )
    2 values ('202RTe312','RDDEPT','15-jan-2006',
    3 XMLType(
    4 '<?xml version="1.0" encoding="UTF-8"?>
    5 <person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="www.PersonInfoUrl.com">
    6 <persondetails>
    7 <personname>Robert </personname>
    8 <personexperience>4.5</personexperience>
    9 </persondetails>
    10 <companyinfo>
    11 <companystartdate>2004-07-24</companystartdate>
    12 <companystandard>3.9</companystandard>
    13 </companyinfo>
    14 <salaryinfo>
    15 <salary>2444.3</salary>
    16 <paymonth> june </paymonth>
    17 </salaryinfo>
    18 </person>'))
    19 /
    1 row created.
    SQL> commit;
    Please suggest how to add new subheader to the existing schema and put the constraint to the tagfields like string length or for double- fractional digits and total digits
    please advise
    Thanks
    Govinda

    Govinda
    Once again, please review your examples before you post. It will you and I, as well as the other users of the forum at lot of time and effort.
    Please note that in your example you have
    <address>SLStreet<address>
    Not
    <address>SLStreet</address>
    That is probably the cause of your problem, as the error message clearly indicates.

  • NOT ABLE TO RECLAIM STORAGE USED BY XMLTYPE COLUMN

    Since we are on Oracle 9i, the 10G solution DBMS_XMLSCHEMA.CopyEvolve() is not available, we are trying to do it by ourselves.
    see the doc,
    Re: how to make xml schema change when there are existing records in the ta
    However, our requirement is different in the following ways:
    1. We hope to be able to add/drop as many XMLTYPE columns to a table as we
    want( all structured storage, but with different schemas).
    2. When a XMLTYPE Schema needs to be updated, we will add a new
    xmltype column, assign it the new schema and migrate the data from the old column. After that we want to drop the old xmltype column and it's schema to reclaim all the storage.
    The underlying xml tables are drop, space reclaimed.
    However, we found out that the segment/blocks/bytes of the xmltype column itself is not released.
    Question:
    1. Since Xmltype column associated with xmltype schema is structured
    stored, the xmldoc should parsed and stored in underlying tables. However, it seems that the xmltype column itself is acquiring sunstantial amount of space.
    By querying user_segments table, we saw the underlying structure is actually taking constant and small space, however, the main table is taking huge space.(We populated the table with 61K rows), For instance,
    SEGMENT_NAME BYTES SEGMENT_TYPE
    PERFORMANCEEVENT 260046848 TABLE
    SYS_C007080275 1048576 INDEX
    Performance1833_TAB 65536 TABLE
    Date1831_TAB 65536 TABLE
    LocationAddress1814_TAB 65536 TABLE
    SYS_IL0010401244C00018$$ 65536 LOBINDEX
    SYS_IL0010401244C00012$$ 65536 LOBINDEX
    Where PERFORMANCEEVENT is the main table.
    Why?

    Try to read this post.
    This will give you an idea about the way and when xml is shred into tables.
    XMLType column based on XML Schema: several questions
    In your case since you are not using the default table, the data is stored witin the table itself as oracle has not shred the data.

  • Copy Evolve Schema Evolution Fails

    Oracle 11gr2 on Linux VM
    SQL*Plus: Release 11.2.0.1.0 Production on Wed Feb 22 13:51:28 2012
    Copyright (c) 1982, 2009, Oracle.  All rights reserved.
    Enter user-name: jmendez
    Enter password:
    Connected to:
    Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options
    BANNER
    Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
    PL/SQL Release 11.2.0.1.0 - Production
    CORE    11.2.0.1.0      Production
    TNS for Linux: Version 11.2.0.1.0 - Production
    NLSRTL Version 11.2.0.1.0 - Production I've been able to get schema evolution to work without data in the table (doesnt help much). When I have data in the table I get the following error message:
    BEGIN
      2    DBMS_XMLSCHEMA.copyEvolve(
      3      xdb$string_list_t('http://localhost/xsd/test/collection_test_3.xsd'),
      4      XMLSequenceType(XDBURIType('/u01/app/xsd/test/collection_evolve_3.xsd').getXML()),
      5      XMLSequenceType(XDBURIType('/u01/app/xsd/test/collection_evolve_3.xsl').getXML()));
      6  END;
      7  /
    BEGIN
    ERROR at line 1:
    ORA-30942: XML Schema Evolution error for schema
    'http://localhost/xsd/test/collection_test_3.xsd' table
    "JMENDEZ"."COLLECTION_TEST" column 'XML_DATA'
    ORA-31011: XML parsing failed
    ORA-19202: Error occurred in XML processing
    LPX-00601: Invalid token in: '()'
    ORA-06512: at "XDB.DBMS_XMLSCHEMA_INT", line 153
    ORA-06512: at "XDB.DBMS_XMLSCHEMA", line 221
    ORA-06512: at line 2I've registered the schema's and loaded revised schema and xsl style sheets into the database. Before I try schema evolution I create the proper context and xml indexes and run a few queries with sample data. This works just fine. I drop the indexes prior to starting schema evolution and run the above command. It fails every time.
    CREATE TABLE collection_test
        NAID     NUMBER not null enable,
        opa_counter     number,
        xml_data      XMLType not null enable,
        desc_type      varchar2(25 byte),
        constraint "PK_CL_NAID" Primary key ("NAID")
      XMLTYPE COLUMN "XML_DATA" STORE AS BASICFILE CLOB
      XMLSCHEMA "http://localhost/xsd/test/collection_test_3.xsd" ELEMENT "collection";
    INSERT INTO COLLECTION_TEST(naid,XML_DATA) VALUES (111112,XMLTYPE('<collection>
          <collectionIdentifier>AAS</collectionIdentifier>
          <dataControlGroup>ou\=NW,ou\=groups,dc\=das,dc\=nara,dc\=gov</dataControlGroup>
          <dateApproved>
             <day>3</day>
             <month>12</month>
             <year>2001</year>
          </dateApproved>
          <dateEntered>
             <day>3</day>
             <month>12</month>
             <year>2001</year>
          </dateEntered>
          <descriptionType>6021989</descriptionType>
          <inclusiveEndDate>
             <year>1926</year>
          </inclusiveEndDate>
          <inclusiveStartDate>
             <year>1923</year>
          </inclusiveStartDate>
          <isUnderEdit>false</isUnderEdit>
          <naId>766</naId>
          <organizationalDonorArray>
             <organizationName>
                <naId>6505115</naId>
             </organizationName>
          </organizationalDonorArray>
          <title>American Antiquarian Society Collection</title>
          <variantControlNumberArray>
             <variantControlNumber>
                <number>AAS</number>
                <variantControlNumberType>
                   <naId>6044072</naId>
                </variantControlNumberType>
             </variantControlNumber>
          </variantControlNumberArray>
       </collection>')); I've used mapforce to generate my XSL file.
    I can't seem to find the right resource online for my problem. Any help or redirection is greatly appreciated. Thanks
    -jjm
    Edited by: jjmdb on Feb 22, 2012 10:51 AM

    I am testing schema evolution in a test environment. I'm only changing the xsd file and adding a new element (fullTitle) and having the data that copied from title to fulltitle.
    BEFORE
    <?xml version="1.0" encoding="UTF-8"?>
    <!--
    - Description : Collections XML schema
    -->
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xdb="http://xmlns.oracle.com/xdb" version="0.3">
         <!--
          - Include document detailing common Archival Types
        -->
         <xs:include schemaLocation="ArchivalTypes.xsd"/>
         <!--
          - Main XML definition
        -->
         <xs:element name="collection" type="coll_type"/>
         <xs:complexType name="coll_type">
              <xs:sequence>
                   <xs:element name="approvedBy" type="xs:string" minOccurs="0"/>
                   <xs:element name="collectionIdentifier" type="xs:string" minOccurs="0"/>
                   <xs:element name="coverageEndDate" type="qualifiableDate" minOccurs="0"/>
                   <xs:element name="coverageStartDate" type="qualifiableDate" minOccurs="0"/>
                   <xs:element name="dataControlGroup" type="xs:string" minOccurs="0"/>
                   <xs:element name="dateApproved" type="dasDate" minOccurs="0"/>
                   <xs:element name="dateEntered" type="dasDate" minOccurs="0"/>
                   <xs:element name="dateNote" type="xs:string" minOccurs="0"/>
                   <xs:element name="descriptionAuthorArray" type="descriptionAuthorArray" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
                   <xs:element name="descriptionDateArray" type="dasDateArray" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
                   <xs:element name="descriptionType" type="xs:long" minOccurs="0"/>
                   <xs:element name="enteredBy" type="xs:string" minOccurs="0"/>
                   <xs:element name="findingAidArray" type="findingAidArray" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
                   <xs:element name="formerlyContainedArray" type="seriesArray" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
                   <xs:element name="inclusiveEndDate" type="qualifiableDate" minOccurs="0"/>
                   <xs:element name="inclusiveStartDate" type="qualifiableDate" minOccurs="0"/>
                   <xs:element name="isUnderEdit" type="xs:boolean" minOccurs="0"/>
                   <xs:element name="naId" type="xs:long" minOccurs="1"/>
                   <xs:element name="organizationalDonorArray" type="organizationNameArray" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
                   <xs:element name="personalDonorArray" type="personArray" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
                   <xs:element name="preliminaryDescriptionArray" type="preliminaryDescriptionArray" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
                   <xs:element name="scopeAndContentNote" type="xs:string" minOccurs="0"/>
                   <xs:element name="seriesArray" type="seriesArray" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
                   <xs:element name="staffOnlyNote" type="xs:string" minOccurs="0"/>
                   <xs:element name="title" type="xs:string" minOccurs="0"/>
                   <xs:element name="variantControlNumberArray" type="variantControlNumberArray" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
              </xs:sequence>
         </xs:complexType>
    </xs:schema>
    AFTER
    <?xml version="1.0" encoding="UTF-8"?>
    <!--
    - Description : Collections XML schema
    -->
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xdb="http://xmlns.oracle.com/xdb" version="0.3">
         <!--
          - Include document detailing common Archival Types
        -->
         <xs:include schemaLocation="ArchivalTypes.xsd"/>
         <!--
          - Main XML definition
        -->
         <xs:element name="collection" type="coll_type"/>
         <xs:complexType name="coll_type">
              <xs:sequence>
                   <xs:element name="approvedBy" type="xs:string" minOccurs="0"/>
                   <xs:element name="collectionIdentifier" type="xs:string" minOccurs="0"/>
                   <xs:element name="coverageEndDate" type="qualifiableDate" minOccurs="0"/>
                   <xs:element name="coverageStartDate" type="qualifiableDate" minOccurs="0"/>
                   <xs:element name="dataControlGroup" type="xs:string" minOccurs="0"/>
                   <xs:element name="dateApproved" type="dasDate" minOccurs="0"/>
                   <xs:element name="dateEntered" type="dasDate" minOccurs="0"/>
                   <xs:element name="dateNote" type="xs:string" minOccurs="0"/>
                   <xs:element name="descriptionAuthorArray" type="descriptionAuthorArray" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
                   <xs:element name="descriptionDateArray" type="dasDateArray" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
                   <xs:element name="descriptionType" type="xs:long" minOccurs="0"/>
                   <xs:element name="enteredBy" type="xs:string" minOccurs="0"/>
                   <xs:element name="findingAidArray" type="findingAidArray" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
                   <xs:element name="formerlyContainedArray" type="seriesArray" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
                   <xs:element name="inclusiveEndDate" type="qualifiableDate" minOccurs="0"/>
                   <xs:element name="inclusiveStartDate" type="qualifiableDate" minOccurs="0"/>
                   <xs:element name="isUnderEdit" type="xs:boolean" minOccurs="0"/>
                   <xs:element name="naId" type="xs:long" minOccurs="1"/>
                   <xs:element name="organizationalDonorArray" type="organizationNameArray" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
                   <xs:element name="personalDonorArray" type="personArray" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
                   <xs:element name="preliminaryDescriptionArray" type="preliminaryDescriptionArray" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
                   <xs:element name="scopeAndContentNote" type="xs:string" minOccurs="0"/>
                   <xs:element name="seriesArray" type="seriesArray" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
                   <xs:element name="staffOnlyNote" type="xs:string" minOccurs="0"/>
                   <xs:element name="title" type="xs:string" minOccurs="0"/>
                   <xs:element name="fullTitle" type="xs:string" minOccurs="0"/>
                   <xs:element name="variantControlNumberArray" type="variantControlNumberArray" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
              </xs:sequence>
         </xs:complexType>
    </xs:schema>XSLT
    <?xml version="1.0" encoding="UTF-8"?>
    <!--
    This file was generated by Altova MapForce 2012sp1
    YOU SHOULD NOT MODIFY THIS FILE, BECAUSE IT WILL BE
    OVERWRITTEN WHEN YOU RE-RUN CODE GENERATION.
    Refer to the Altova MapForce Documentation for further details.
    http://www.altova.com/mapforce
    -->
    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:core="http://www.altova.com/MapForce/UDF/core" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" exclude-result-prefixes="core xs fn">
         <xsl:template name="core:convert-uri-to-windows-file-path">
              <xsl:param name="uri" select="()"/>
              <xsl:choose>
                   <xsl:when test="fn:starts-with($uri, 'file://')">
                        <xsl:choose>
                             <xsl:when test="(fn:substring($uri, xs:double('6'), xs:double('3')) = '///')">
                                  <xsl:variable name="var1_resultof_url_decode" as="xs:string">
                                       <xsl:call-template name="core:url-decode">
                                            <xsl:with-param name="uri" select="fn:substring($uri, xs:double('9'), xs:double(fn:string-length($uri)))" as="xs:string"/>
                                       </xsl:call-template>
                                  </xsl:variable>
                                  <xsl:sequence select="fn:translate($var1_resultof_url_decode, '/|', '\:')"/>
                             </xsl:when>
                             <xsl:otherwise>
                                  <xsl:sequence select="$uri"/>
                             </xsl:otherwise>
                        </xsl:choose>
                   </xsl:when>
                   <xsl:otherwise>
                        <xsl:sequence select="$uri"/>
                   </xsl:otherwise>
              </xsl:choose>
         </xsl:template>
         <xsl:template name="core:url-decode">
              <xsl:param name="uri" select="()"/>
              <xsl:choose>
                   <xsl:when test="fn:contains($uri, '%')">
                        <xsl:variable name="var1_resultof_url_decode_part" as="xs:string">
                             <xsl:call-template name="core:url-decode-part">
                                  <xsl:with-param name="uripart" select="fn:substring-after($uri, '%')" as="xs:string"/>
                             </xsl:call-template>
                        </xsl:variable>
                        <xsl:sequence select="fn:concat(fn:substring-before($uri, '%'), $var1_resultof_url_decode_part)"/>
                   </xsl:when>
                   <xsl:otherwise>
                        <xsl:sequence select="$uri"/>
                   </xsl:otherwise>
              </xsl:choose>
         </xsl:template>
         <xsl:template name="core:url-decode-part">
              <xsl:param name="uripart" select="()"/>
              <xsl:variable name="var1_resultof_dec_from__digits_hex" as="xs:decimal">
                   <xsl:call-template name="core:dec-from-2digits-hex">
                        <xsl:with-param name="hex" select="$uripart" as="xs:string"/>
                   </xsl:call-template>
              </xsl:variable>
              <xsl:choose>
                   <xsl:when test="($var1_resultof_dec_from__digits_hex &lt; xs:decimal('128'))">
                        <xsl:call-template name="core:url-decode-utf8">
                             <xsl:with-param name="value" select="$var1_resultof_dec_from__digits_hex" as="xs:decimal"/>
                             <xsl:with-param name="bytes" select="xs:decimal('0')" as="xs:decimal"/>
                             <xsl:with-param name="rest" select="fn:substring($uripart, xs:double('3'), xs:double(fn:string-length($uripart)))" as="xs:string"/>
                        </xsl:call-template>
                   </xsl:when>
                   <xsl:when test="($var1_resultof_dec_from__digits_hex &lt; xs:decimal('194'))">
                        <xsl:call-template name="core:url-decode">
                             <xsl:with-param name="uri" select="fn:substring($uripart, xs:double('3'), xs:double(fn:string-length($uripart)))" as="xs:string"/>
                        </xsl:call-template>
                   </xsl:when>
                   <xsl:when test="($var1_resultof_dec_from__digits_hex &lt; xs:decimal('224'))">
                        <xsl:call-template name="core:url-decode-utf8">
                             <xsl:with-param name="value" select="$var1_resultof_dec_from__digits_hex" as="xs:decimal"/>
                             <xsl:with-param name="bytes" select="xs:decimal('1')" as="xs:decimal"/>
                             <xsl:with-param name="rest" select="fn:substring($uripart, xs:double('3'), xs:double(fn:string-length($uripart)))" as="xs:string"/>
                        </xsl:call-template>
                   </xsl:when>
                   <xsl:when test="($var1_resultof_dec_from__digits_hex &lt; xs:decimal('240'))">
                        <xsl:call-template name="core:url-decode-utf8">
                             <xsl:with-param name="value" select="$var1_resultof_dec_from__digits_hex" as="xs:decimal"/>
                             <xsl:with-param name="bytes" select="xs:decimal('2')" as="xs:decimal"/>
                             <xsl:with-param name="rest" select="fn:substring($uripart, xs:double('3'), xs:double(fn:string-length($uripart)))" as="xs:string"/>
                        </xsl:call-template>
                   </xsl:when>
                   <xsl:when test="($var1_resultof_dec_from__digits_hex &lt; xs:decimal('245'))">
                        <xsl:call-template name="core:url-decode-utf8">
                             <xsl:with-param name="value" select="$var1_resultof_dec_from__digits_hex" as="xs:decimal"/>
                             <xsl:with-param name="bytes" select="xs:decimal('3')" as="xs:decimal"/>
                             <xsl:with-param name="rest" select="fn:substring($uripart, xs:double('3'), xs:double(fn:string-length($uripart)))" as="xs:string"/>
                        </xsl:call-template>
                   </xsl:when>
                   <xsl:otherwise>
                        <xsl:sequence select="''"/>
                   </xsl:otherwise>
              </xsl:choose>
         </xsl:template>
         <xsl:template name="core:dec-from-2digits-hex">
              <xsl:param name="hex" select="()"/>
              <xsl:variable name="var1_resultof_dec_from__digit_hex" as="xs:decimal">
                   <xsl:call-template name="core:dec-from-1digit-hex">
                        <xsl:with-param name="hex" select="fn:substring($hex, xs:double('1'), xs:double('1'))" as="xs:string"/>
                   </xsl:call-template>
              </xsl:variable>
              <xsl:variable name="var2_resultof_dec_from__digit_hex" as="xs:decimal">
                   <xsl:call-template name="core:dec-from-1digit-hex">
                        <xsl:with-param name="hex" select="fn:substring($hex, xs:double('2'), xs:double('1'))" as="xs:string"/>
                   </xsl:call-template>
              </xsl:variable>
              <xsl:sequence select="(($var1_resultof_dec_from__digit_hex * xs:decimal('16')) + $var2_resultof_dec_from__digit_hex)"/>
         </xsl:template>
         <xsl:template name="core:url-decode-utf8">
              <xsl:param name="value" select="()"/>
              <xsl:param name="bytes" select="()"/>
              <xsl:param name="rest" select="()"/>
              <xsl:choose>
                   <xsl:when test="($bytes = xs:integer('0'))">
                        <xsl:variable name="var1_resultof_char_from_code" as="xs:string">
                             <xsl:call-template name="core:char-from-code">
                                  <xsl:with-param name="code" select="xs:integer($value)" as="xs:integer"/>
                             </xsl:call-template>
                        </xsl:variable>
                        <xsl:variable name="var2_resultof_url_decode" as="xs:string">
                             <xsl:call-template name="core:url-decode">
                                  <xsl:with-param name="uri" select="$rest" as="xs:string"/>
                             </xsl:call-template>
                        </xsl:variable>
                        <xsl:sequence select="fn:concat($var1_resultof_char_from_code, $var2_resultof_url_decode)"/>
                   </xsl:when>
                   <xsl:when test="(fn:substring($rest, xs:double('1'), xs:double('1')) = '%')">
                        <xsl:variable name="var3_resultof_cast" as="xs:double" select="xs:double(fn:string-length($rest))"/>
                        <xsl:variable name="var4_resultof_dec_from__digits_hex" as="xs:decimal">
                             <xsl:call-template name="core:dec-from-2digits-hex">
                                  <xsl:with-param name="hex" select="fn:substring($rest, xs:double('2'), $var3_resultof_cast)" as="xs:string"/>
                             </xsl:call-template>
                        </xsl:variable>
                        <xsl:call-template name="core:url-decode-utf8">
                             <xsl:with-param name="value" select="((($value mod xs:decimal('64')) * xs:decimal('64')) + ($var4_resultof_dec_from__digits_hex mod xs:decimal('64')))" as="xs:decimal"/>
                             <xsl:with-param name="bytes" select="($bytes - xs:decimal('1'))" as="xs:decimal"/>
                             <xsl:with-param name="rest" select="fn:substring($rest, xs:double('4'), $var3_resultof_cast)" as="xs:string"/>
                        </xsl:call-template>
                   </xsl:when>
                   <xsl:otherwise>
                        <xsl:call-template name="core:url-decode">
                             <xsl:with-param name="uri" select="$rest" as="xs:string"/>
                        </xsl:call-template>
                   </xsl:otherwise>
              </xsl:choose>
         </xsl:template>
         <xsl:template name="core:dec-from-1digit-hex">
              <xsl:param name="hex" select="()"/>
              <xsl:variable name="var1_resultof_string_length" as="xs:integer" select="fn:string-length(fn:substring-before('0123456789ABCDEFabcdef', $hex))"/>
              <xsl:choose>
                   <xsl:when test="($var1_resultof_string_length &lt;= xs:integer('15'))">
                        <xsl:sequence select="$var1_resultof_string_length"/>
                   </xsl:when>
                   <xsl:otherwise>
                        <xsl:sequence select="($var1_resultof_string_length - xs:decimal('6'))"/>
                   </xsl:otherwise>
              </xsl:choose>
         </xsl:template>
         <xsl:template name="core:char-from-code">
              <xsl:param name="code" select="()"/>
              <xsl:sequence select="fn:codepoints-to-string($code)"/>
         </xsl:template>
         <xsl:output method="xml" encoding="UTF-8" indent="yes"/>
         <xsl:template match="/">
              <xsl:variable name="var1_resultof_document" as="node()" select="."/>
              <xsl:variable name="var2_resultof_convert_uri_to_windows_file_path" as="xs:string">
                   <xsl:call-template name="core:convert-uri-to-windows-file-path">
                        <xsl:with-param name="uri" select="fn:document-uri($var1_resultof_document)" as="xs:string"/>
                   </xsl:call-template>
              </xsl:variable>
              <xsl:result-document href="{$var2_resultof_convert_uri_to_windows_file_path}" encoding="UTF-8">
                   <collection>
                        <xsl:attribute name="xsi:noNamespaceSchemaLocation" namespace="http://www.w3.org/2001/XMLSchema-instance" select="'C:/Users/Javier/Documents/XML/XSD/collection_evolve_2.xsd'"/>
                        <xsl:for-each select="$var1_resultof_document/collection">
                             <xsl:variable name="var3_title" as="node()?" select="title"/>
                             <xsl:for-each select="approvedBy">
                                  <approvedBy>
                                       <xsl:sequence select="fn:string(.)"/>
                                  </approvedBy>
                             </xsl:for-each>
                             <xsl:for-each select="collectionIdentifier">
                                  <collectionIdentifier>
                                       <xsl:sequence select="fn:string(.)"/>
                                  </collectionIdentifier>
                             </xsl:for-each>
                             <xsl:for-each select="coverageEndDate">
                                  <coverageEndDate>
                                       <xsl:sequence select="(./@node(), ./node())"/>
                                  </coverageEndDate>
                             </xsl:for-each>
                             <xsl:for-each select="coverageStartDate">
                                  <coverageStartDate>
                                       <xsl:sequence select="(./@node(), ./node())"/>
                                  </coverageStartDate>
                             </xsl:for-each>
                             <xsl:for-each select="dataControlGroup">
                                  <dataControlGroup>
                                       <xsl:sequence select="fn:string(.)"/>
                                  </dataControlGroup>
                             </xsl:for-each>
                             <xsl:for-each select="dateApproved">
                                  <dateApproved>
                                       <xsl:sequence select="(./@node(), ./node())"/>
                                  </dateApproved>
                             </xsl:for-each>
                             <xsl:for-each select="dateEntered">
                                  <dateEntered>
                                       <xsl:sequence select="(./@node(), ./node())"/>
                                  </dateEntered>
                             </xsl:for-each>
                             <xsl:for-each select="dateNote">
                                  <dateNote>
                                       <xsl:sequence select="fn:string(.)"/>
                                  </dateNote>
                             </xsl:for-each>
                             <xsl:for-each select="descriptionAuthorArray">
                                  <descriptionAuthorArray>
                                       <xsl:sequence select="(./@node(), ./node())"/>
                                  </descriptionAuthorArray>
                             </xsl:for-each>
                             <xsl:for-each select="descriptionDateArray">
                                  <descriptionDateArray>
                                       <xsl:sequence select="(./@node(), ./node())"/>
                                  </descriptionDateArray>
                             </xsl:for-each>
                             <xsl:for-each select="descriptionType">
                                  <descriptionType>
                                       <xsl:sequence select="xs:string(xs:integer(fn:string(.)))"/>
                                  </descriptionType>
                             </xsl:for-each>
                             <xsl:for-each select="enteredBy">
                                  <enteredBy>
                                       <xsl:sequence select="fn:string(.)"/>
                                  </enteredBy>
                             </xsl:for-each>
                             <xsl:for-each select="findingAidArray">
                                  <findingAidArray>
                                       <xsl:sequence select="(./@node(), ./node())"/>
                                  </findingAidArray>
                             </xsl:for-each>
                             <xsl:for-each select="formerlyContainedArray">
                                  <formerlyContainedArray>
                                       <xsl:sequence select="(./@node(), ./node())"/>
                                  </formerlyContainedArray>
                             </xsl:for-each>
                             <xsl:for-each select="inclusiveEndDate">
                                  <inclusiveEndDate>
                                       <xsl:sequence select="(./@node(), ./node())"/>
                                  </inclusiveEndDate>
                             </xsl:for-each>
                             <xsl:for-each select="inclusiveStartDate">
                                  <inclusiveStartDate>
                                       <xsl:sequence select="(./@node(), ./node())"/>
                                  </inclusiveStartDate>
                             </xsl:for-each>
                             <xsl:for-each select="isUnderEdit">
                                  <isUnderEdit>
                                       <xsl:sequence select="xs:string(xs:boolean(fn:string(.)))"/>
                                  </isUnderEdit>
                             </xsl:for-each>
                             <naId>
                                  <xsl:sequence select="xs:string(xs:integer(fn:string(naId)))"/>
                             </naId>
                             <xsl:for-each select="organizationalDonorArray">
                                  <organizationalDonorArray>
                                       <xsl:sequence select="(./@node(), ./node())"/>
                                  </organizationalDonorArray>
                             </xsl:for-each>
                             <xsl:for-each select="personalDonorArray">
                                  <personalDonorArray>
                                       <xsl:sequence select="(./@node(), ./node())"/>
                                  </personalDonorArray>
                             </xsl:for-each>
                             <xsl:for-each select="preliminaryDescriptionArray">
                                  <preliminaryDescriptionArray>
                                       <xsl:sequence select="(./@node(), ./node())"/>
                                  </preliminaryDescriptionArray>
                             </xsl:for-each>
                             <xsl:for-each select="scopeAndContentNote">
                                  <scopeAndContentNote>
                                       <xsl:sequence select="fn:string(.)"/>
                                  </scopeAndContentNote>
                             </xsl:for-each>
                             <xsl:for-each select="seriesArray">
                                  <seriesArray>
                                       <xsl:sequence select="(./@node(), ./node())"/>
                                  </seriesArray>
                             </xsl:for-each>
                             <xsl:for-each select="staffOnlyNote">
                                  <staffOnlyNote>
                                       <xsl:sequence select="fn:string(.)"/>
                                  </staffOnlyNote>
                             </xsl:for-each>
                             <xsl:for-each select="$var3_title">
                                  <title>
                                       <xsl:sequence select="fn:string(.)"/>
                                  </title>
                             </xsl:for-each>
                             <xsl:for-each select="$var3_title">
                                  <fullTitle>
                                       <xsl:sequence select="fn:string(.)"/>
                                  </fullTitle>
                             </xsl:for-each>
                             <xsl:for-each select="variantControlNumberArray">
                                  <variantControlNumberArray>
                                       <xsl:sequence select="(./@node(), ./node())"/>
                                  </variantControlNumberArray>
                             </xsl:for-each>
                        </xsl:for-each>
                   </collection>
              </xsl:result-document>
         </xsl:template>
    </xsl:stylesheet>Edited by: jjmdb on Feb 22, 2012 11:42 AM

  • How to create default column in XML schema ?

    Hi All,
    I would like to define a default column let's say Run_Date as Date datatype in XML schema definition (XSD) and would like to populate SYSDATE to the column Run_Date, When XML records are parsed to that schema.
    Please let me know, how we can achieve?
    Thanks in Advance.

    Hi,
    Thanks for the update. Please find below my responses and let me know your thoughts.
    The Existing schema definition is as follows
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xdb="http://xmlns.oracle.com/xdb" version="1.0" xdb:storeVarrayAsTable="true">
    <xs:element name="Emp" type="EmpType" xdb:defaultTable="EMPLOYEES" xdb:columnProps="CONSTRAINT emp_pk PRIMARY KEY (XMLDATA.EMP_NO)" />
    <xs:complexType name="EmpType" xdb:SQLType="EMPLOYEES_T">
    <xs:sequence>
    <xs:element name="EmpNo" xdb:SQLName="EMP_NO">
    <xs:simpleType>
    <xs:restriction base="xs:positiveInteger">
    <xs:totalDigits value="10"/>
    </xs:restriction>
    </xs:simpleType>
    </xs:element>
    <xs:element name="FirstName" xdb:SQLName="FIRST_NAME">
    <xs:simpleType>
    <xs:restriction base="xs:string">
    <xs:maxLength value="30"/>
    </xs:restriction>
    </xs:simpleType>
    </xs:element>
    <xs:element name="LastName" xdb:SQLName="LAST_NAME">
    <xs:simpleType>
    <xs:restriction base="xs:string">
    <xs:maxLength value="30"/>
    </xs:restriction>
    </xs:simpleType>
    </xs:element>
    <xs:element name="EmployeeType" xdb:SQLName="EMPLOYEE_TYPE">
    <xs:simpleType>
    <xs:restriction base="xs:string">
    <xs:length value="25"/>
    <xs:enumeration value="Permanent"/>     
    <xs:enumeration value="Consultant"/>
    </xs:restriction>
    </xs:simpleType>
    </xs:element>
    <xs:element name="EmpLocation" xdb:SQLName="EMP_LOCATION">
    <xs:simpleType>
    <xs:restriction base="xs:string">
    <xs:maxLength value="25"/>
    <xs:enumeration value="NewYork"/>
    </xs:restriction>
    </xs:simpleType>
    </xs:element>
    <xs:element name="EmpExperience" xdb:SQLName="EMP_EXPERIENCE">
    <xs:simpleType>
    <xs:restriction base="xs:positiveInteger">
    <xs:totalDigits value="10"/>
    </xs:restriction>
    </xs:simpleType>
    </xs:element>
    </xs:sequence>
    </xs:complexType>
    </xs:schema>
    The sample XML file is as follows
    <?xml version="1.0"?>
    <Emp xsi:noNamespaceSchemaLocation="EMP.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xdb="http://xmlns.oracle.com/xdb">
    <EmpNo>1001</EmpNo>
    <FirstName>William</FirstName>
    <LastName>Don</LastName>
    <EmployeeType>Permanent</EmployeeType>
    <EmpLocation>NewYork</EmpLocation>
    <EmpExperience>10</EmpExperience>
    </Emp>
    The modified schema definition is as follows
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xdb="http://xmlns.oracle.com/xdb" version="1.0" xdb:storeVarrayAsTable="true">
    <xs:element name="Emp" type="EmpType" xdb:defaultTable="EMPLOYEES" xdb:columnProps="CONSTRAINT emp_pk PRIMARY KEY (XMLDATA.EMP_NO)" />
    <xs:complexType name="EmpType" xdb:SQLType="EMPLOYEES_T">
    <xs:sequence>
    <xs:element name="EmpNo" xdb:SQLName="EMP_NO">
    <xs:simpleType>
    <xs:restriction base="xs:positiveInteger">
    <xs:totalDigits value="10"/>
    </xs:restriction>
    </xs:simpleType>
    </xs:element>
    <xs:element name="FirstName" xdb:SQLName="FIRST_NAME">
    <xs:simpleType>
    <xs:restriction base="xs:string">
    <xs:maxLength value="30"/>
    </xs:restriction>
    </xs:simpleType>
    </xs:element>
    <xs:element name="LastName" xdb:SQLName="LAST_NAME">
    <xs:simpleType>
    <xs:restriction base="xs:string">
    <xs:maxLength value="30"/>
    </xs:restriction>
    </xs:simpleType>
    </xs:element>
    <xs:element name="EmployeeType" xdb:SQLName="EMPLOYEE_TYPE">
    <xs:simpleType>
    <xs:restriction base="xs:string">
    <xs:length value="25"/>
    <xs:enumeration value="Permanent"/>     
    <xs:enumeration value="Consultant"/>
    </xs:restriction>
    </xs:simpleType>
    </xs:element>
    <xs:element name="EmpLocation" xdb:SQLName="EMP_LOCATION">
    <xs:simpleType>
    <xs:restriction base="xs:string">
    <xs:maxLength value="25"/>
    <xs:enumeration value="NewYork"/>
    </xs:restriction>
    </xs:simpleType>
    </xs:element>
    <xs:element name="EmpExperience" xdb:SQLName="EMP_EXPERIENCE">
    <xs:simpleType>
    <xs:restriction base="xs:positiveInteger">
    <xs:totalDigits value="10"/>
    </xs:restriction>
    </xs:simpleType>
    </xs:element>
    </xs:sequence>
    </xs:complexType>
    <xs:element name="WorkHrs" maxOccurs="100" xdb:SQLName="WorkHrs" xdb:propNumber="3280" xdb:global="false" xdb:SQLType="WorkHrs_T" xdb:SQLSchema="APPS" xdb:memType="258" xdb:SQLInline="true" xdb:MemInline="false" xdb:JavaInline="false" xdb:SQLCollType="WORKHRS330_COLL" xdb:SQLCollSchema="APPS">
    <xs:complexType xdb:SQLType="WORKHRS_T" xdb:SQLSchema="APPS">
    <xs:attribute name="Day" xdb:SQLName="DAY" xdb:propNumber="3273" xdb:global="false" xdb:SQLType="VARCHAR2" xdb:memType="2">
    <xs:simpleType>
    <xs:restriction base="xs:string">
    <xs:maxLength value="20"/>
    </xs:restriction>
    </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="Hrs" xdb:SQLName="HRS" xdb:propNumber="3274" xdb:global="false" xdb:SQLType="NUMBER" xdb:memType="2">
    <xs:simpleType>
    <xs:restriction base="xs:decimal"/>
    </xs:simpleType>
    </xs:attribute>
    </xs:schema>
    The sample XML file is as follows
    <?xml version="1.0"?>
    <Emp xsi:noNamespaceSchemaLocation="EMP.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xdb="http://xmlns.oracle.com/xdb">
    <EmpNo>1001</EmpNo>
    <FirstName>William</FirstName>
    <LastName>Don</LastName>
    <EmployeeType>Permanent</EmployeeType>
    <EmpLocation>NewYork</EmpLocation>
    <EmpExperience>10</EmpExperience>
    <WorkHrs Day="Monday" Hrs="8.0"/>
    <WorkHrs Day="Tuesday" Hrs="6.5"/>
    <WorkHrs Day="Wednesday" Hrs="8.5"/>
    <WorkHrs Day="Thursday" Hrs="10.5"/>
    <WorkHrs Day="Friday" Hrs="5.5"/>
    </Emp>
    The Copy Evolve Procedure is as follows (I have added attributes to the above schema definition)
    DECLARE
    SCHEMA_TO_EVOLVE     XDB$STRING_LIST_T;
    NEW_SCHEMA               XMLSEQUENCETYPE;
    OLD_SCHEMA_URL          VARCHAR2(100) := 'EMP.xsd';
    V_NEW_XML_DOC          CLOB := '<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xdb="http://xmlns.oracle.com/xdb" version="1.0" xdb:storeVarrayAsTable="true">
    <xs:element name="Emp" type="EmpType" xdb:defaultTable="EMPLOYEES" xdb:columnProps="CONSTRAINT emp_pk PRIMARY KEY (XMLDATA.EMP_NO)" />
    <xs:complexType name="EmpType" xdb:SQLType="EMPLOYEES_T">
    <xs:sequence>
    <xs:element name="EmpNo" xdb:SQLName="EMP_NO">
    <xs:simpleType>
    <xs:restriction base="xs:positiveInteger">
    <xs:totalDigits value="10"/>
    </xs:restriction>
    </xs:simpleType>
    </xs:element>
    <xs:element name="FirstName" xdb:SQLName="FIRST_NAME">
    <xs:simpleType>
    <xs:restriction base="xs:string">
    <xs:maxLength value="30"/>
    </xs:restriction>
    </xs:simpleType>
    </xs:element>
    <xs:element name="LastName" xdb:SQLName="LAST_NAME">
    <xs:simpleType>
    <xs:restriction base="xs:string">
    <xs:maxLength value="30"/>
    </xs:restriction>
    </xs:simpleType>
    </xs:element>
    <xs:element name="EmployeeType" xdb:SQLName="EMPLOYEE_TYPE">
    <xs:simpleType>
    <xs:restriction base="xs:string">
    <xs:length value="25"/>
    <xs:enumeration value="Permanent"/>     
    <xs:enumeration value="Consultant"/>
    </xs:restriction>
    </xs:simpleType>
    </xs:element>
    <xs:element name="EmpLocation" xdb:SQLName="EMP_LOCATION">
    <xs:simpleType>
    <xs:restriction base="xs:string">
    <xs:maxLength value="25"/>
    <xs:enumeration value="NewYork"/>
    </xs:restriction>
    </xs:simpleType>
    </xs:element>
    <xs:element name="EmpExperience" xdb:SQLName="EMP_EXPERIENCE">
    <xs:simpleType>
    <xs:restriction base="xs:positiveInteger">
    <xs:totalDigits value="10"/>
    </xs:restriction>
    </xs:simpleType>
    </xs:element>
    </xs:sequence>
    </xs:complexType>
    <xs:element name="WorkHrs" maxOccurs="100" xdb:SQLName="WorkHrs" xdb:propNumber="3280" xdb:global="false" xdb:SQLType="WorkHrs_T" xdb:SQLSchema="APPS" xdb:memType="258" xdb:SQLInline="true" xdb:MemInline="false" xdb:JavaInline="false" xdb:SQLCollType="WORKHRS330_COLL" xdb:SQLCollSchema="APPS">
    <xs:complexType xdb:SQLType="WORKHRS_T" xdb:SQLSchema="APPS">
    <xs:attribute name="Day" xdb:SQLName="DAY" xdb:propNumber="3273" xdb:global="false" xdb:SQLType="VARCHAR2" xdb:memType="2">
    <xs:simpleType>
    <xs:restriction base="xs:string">
    <xs:maxLength value="20"/>
    </xs:restriction>
    </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="Hrs" xdb:SQLName="HRS" xdb:propNumber="3274" xdb:global="false" xdb:SQLType="NUMBER" xdb:memType="2">
    <xs:simpleType>
    <xs:restriction base="xs:decimal"/>
    </xs:simpleType>
    </xs:attribute>
    </xs:schema>';
    BEGIN
    DBMS_OUTPUT.PUT_LINE('B4 GETTING FILE FROM OS');
    EXECUTE IMMEDIATE 'DROP TABLE EMPLOYEES_TEMP';
    -- Getting file from the file system
    --V_NEW_XML_DOC           := XXTIF_EDI_UTL.GET_CLOB_DOCUMENT('COIL_1.1.xsd','UTF8');
    SCHEMA_TO_EVOLVE     := XDB$STRING_LIST_T(OLD_SCHEMA_URL);
    NEW_SCHEMA           := XMLSEQUENCETYPE(XMLTYPE(V_NEW_XML_DOC));
    DBMS_XMLSCHEMA.COPYEVOLVE(SCHEMA_TO_EVOLVE,NEW_SCHEMA, preserveOldDocs => TRUE, mapTabName => 'EMPLOYEES_TEMP', generateTables => FALSE);
    COMMIT;
    DBMS_OUTPUT.PUT_LINE('SUCCESSFULLY COPIED');
    EXCEPTION
    WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE('THE ERROR IS '||SQLERRM);
    END;
    The Table Creation is as follows
    CREATE TABLE EMPLOYEES (XMLDOC XMLTYPE,
                   CREATE_DATE DATE DEFAULT SYSDATE NOT NULL ,
    CONSTRAINT emp_pk PRIMARY KEY (XMLDOC."XMLDATA".EMP_NO)
    XMLTYPE COLUMN XMLDOC STORE AS OBJECT RELATIONAL
    XMLSCHEMA "EMP.xsd" ELEMENT "Emp"
    DECLARE
    TABLENAME VARCHAR2(2000) := 'EMPLOYEES1128';
    BEGIN
    SELECT TEMP_TABNAME
    INTO TABLENAME
    FROM EMPLOYEES_TEMP
    WHERE TABLE_NAME = USER || '.' || UPPER('RELATIE_DOCUMENTEN');
    EXECUTE IMMEDIATE 'INSERT INTO EMPLOYEES(XMLDOC) SELECT XMLTYPE(DATA) FROM ' || TABLENAME;
    COMMIT;
    END;
    When I executed the above SQL, It only populates main data(Perosnal Details such as EmpNo,FirstName,LastName) but not attributes (Workhrs.Day,WOrkhrs.Hrs).
    Please let me know, how can I move those attributes data?
    Again Oracle & XML versions are as follows
    Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Prod
    PL/SQL Release 10.2.0.3.0 - Production
    CORE 10.2.0.3.0 Production
    Oracle XML Database 10.2.0.3.0
    Thanks in Advance.

  • How to modify the Registered Schema

    Hi Gurus,
    I have registered an XMLschema (A) based on an xsd and a table with column having datatype XMLTYPE is created based on the schema. Now this xsd is inherited by many xsds and based on those xsd's schemas are created and tables with columns having datatype as XMLTYPE are created.
    Now when the definition of the schema A changes, now I have to drop the underlying table and referenced schemas and create it all fresh. I don't want to do that. Is there a better way of doing that. Please forward me examples if this can be accomplished, coz deleting and registering the schema again is a pain in the neck.
    My Oracle DB version is as follows :-
    Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bi
    PL/SQL Release 10.2.0.3.0 - Production
    CORE 10.2.0.3.0 Production
    TNS for HPUX: Version 10.2.0.3.0 - Production
    NLSRTL Version 10.2.0.3.0 - Production
    Thanks and Regards,

    You are looking for [DBMS_XMLSCHEMA.COPYEVOLVE|http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14258/d_xmlsch.htm#sthref9652].
    You can find more info in the {forum:id=34} forum or at [Marco&apos;s Blog|http://www.liberidu.com/blog/]

  • Reregister modified XML Schema

    I have some XML Schemas registered with my oracle 10g database. The types are created, but not the tables.
    Now I have a change in field length in one of the Schemas and I need to reregister it. All the other schemas are dependent on this modified schema.
    I used the following approach to delete the schema and register it.
    dbms_xmlschema.deleteschema(schemaurl => 'my url',
    delete_option => dbms_xmlschema.DELETE_CASCADE_FORCE);
    dbms_xmlschema.registerschema(schemaurl => 'my url',
    schemadoc => BFILENAME(SCHEMADIR, 'schema_name'),
    local=>true,
    genTypes=>true,
    genbean=>false,
    genTables=>false,
    force=>false);
    This successfully registered the schema.
    But whenever the database is restarted, I face a dangling ref error whenever I try to access the OOT created for the Schema.
    Any pointers on this will be of great help. Is this the right approach?
    Also I read about dbms_xmlschema.copyevolve() procedure. I only need the types, so I am not interested in any transformations as I dont have any instance documents.

    The last problem regarding dangling ref's on this forum ended up in creating an SR with support...
    Before you register the schema you could set an event that will trace all statements that are executed in the "background" and stored in a trace file in the UDUMP directory
    ALTER session SET events = '31098 trace name context forever';It is also always useful to check the database alert.log for errors...
    Edited by: Marco Gralike on Nov 19, 2008 9:23 PM

Maybe you are looking for