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 DavidCan 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 ?
GregorWhich 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
GovindaAfter 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. -
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,
ggbHi,
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. -
Actually I have a problem relating to Oracle 10g XML DB. Ill 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 Ive thought is:
1. Generate a new XSD schema (dont 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 (dont 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 dont 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,
atharDoes 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
GovindaGovinda
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 AMI 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 < 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 < 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 < 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 < 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 < 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 <= 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'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
-
How to hide Compounding object in report
Hi friends We want to display region in our reports , But when I execute the query region is coming along with county (eg: US/TX , US/CA etc..) ...this is because of country is a compunding object of region...Can any body let me know how to hide coun
-
My iphone 5 send sms but not recive sms
IPhone 5 sends text messages but not recive text messages when the message sent from another mobile phone I notice that the message Send but to not recive to my mobile
-
I deleted iPhoto by accident but it says not registered to user id when i try and get it back
i bought the computer from someone else so that means their apple id is registered to the app, i have no problem buying it but it keeps on showing accept nit buy, how do i buy it for myself?
-
Chunk expression .color returning error
Greetings, this one shoudl be so simple it is driving me crazy. I'm trying to test and set the color of a word in a text field, containing ten comma separated words, as follows in Dir 8.5 message window: put member("test").text -- "one, two, three, f
-
When I open safari from the dock it opens as a small window at the top of the screen that is totally white and does not have a tool bar or exit options. All I can do is force quit to exit. What do I do?