Constraints on a XMLTYPE table
Hi,
Has anyone been able to construct constraints on a XMLTYPE table as shown on page 5-52 of the XDB Developers
guide.
Whatever I try I get errors:
create table poc_wip2 of xmltype
element "http://www.derwent.co.uk/wpi.xsd#WPI"
(unique(XMLDATA.WPI_TYPE.BibPt2645_T.co))
(unique(XMLDATA.WPI_TYPE.BibPt2645_T.co))
ERROR at line 3:
ORA-00922: missing or invalid option
create table poc_wip2 p of xmltype
element "http://www.derwent.co.uk/wpi.xsd#WPI"
(unique(extract(value(p),/WPI/BibPt@co')))
create table poc_wip2 p of xmltype
ERROR at line 1:
ORA-00922: missing or invalid option
What I would like to be able to do is to define a primary key constraint based on three attribute values. Is this possible
using XMLTYPE?
Thanks
Pete
Peter
Remember that the attribute names generated from the Schema are case sensitive bu SQL is not. You will have to use something like XMLDATA.WPI_TYPE."BibPt2645_T"."co" in the constraint definition
It may be easier to create the table via registerSchema and then alter the constraint onto the table..
EG.
alter table purchaseorder
add constraint REFERENCE_IS_UNIQUE
unique (xmldata."Reference")
alter table purchaseorder
add constraint USER_IS_VALID
foreign key (xmldata."User") references SCOTT.emp(ename)
create trigger VALIDATE_PURCHASEORDER
before insert on purchaseorder
for each row
declare
XMLDATA xmltype;
begin
XMLDATA := :new.sys_nc_rowinfo$;
xmltype.schemavalidate(XMLDATA);
end;
--quit
The reason for this is that if you want to keep a table created from a schema in_sync with the resource view you need to call
dbms_xdbz.enableHierarchy(SCHEMA,TABLE) after creating the table..
Similar Messages
-
Referential constraints on XMLType tables
Hi all,
I'm trying to create an XMLType table with a foreign key that references another XMLType table. Shouldn't be a big deal, i thought.
CREATE TABLE datasets (
ID NUMBER,
XML XMLTYPE )
XMLTYPE COLUMN XML XMLSCHEMA "dataset_schema.xsd" ELEMENT "root";
CREATE TABLE categories OF XMLTYPE XMLSCHEMA "categories.xsd" ELEMENT "categories";
ALTER TABLE datasets
2 ADD CONSTRAINT dataset_isvalid
3 FOREIGN KEY(XML.XMLDATA."dataset"."metaInformation"."referenceFunction"."category")
4 REFERENCES categories(XMLDATA."category"."name");
FOREIGN KEY(XML.XMLDATA."dataset"."metaInformation"."referenceFunction"."category")
ERROR at line 3:
ORA-22809: nonexistent attribute
I've then been reading through the postings regarding foreign key and unique constraints and i've managed to understand the concept of nested tables. To my dismay, trying to establish referential constraints my nested tables would throw an ORA-30730 stating this cannot be done.
I've simplified my schemas a little so it won't get to complicated: one table will store datasets and the other will hold category names.
The schema for the categories is
<?xml version="1.0" encoding="UTF-8"?>
<!-- schema for categories -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="categories">
<xs:complexType>
<xs:sequence>
<xs:element name="category" type="categoryType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="categoryType">
<xs:sequence>
<xs:element name="subCategory" type="subCategoryType" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="localName" type="xs:string" use="required"/>
<xs:attribute name="type" type="xs:byte" use="required"/>
</xs:complexType>
<xs:complexType name="subCategoryType">
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="localName" type="xs:string" use="required"/>
</xs:complexType>
</xs:schema>
and the schema for the dataset table is
<?xml version="1.0" encoding="UTF-8"?>
<!- dataset schema-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:complexType name="datasetType">
<xs:sequence>
<xs:element name="metaInformation" type="metaInformationType"/>
<xs:element ref="otherInformation"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="metaInformationType">
<xs:sequence>
<xs:element name="referenceFunction" type="referenceFunctionType"/>
</xs:sequence>
</xs:complexType>
<xs:element name="otherInformation" type="xs:string"/>
<xs:complexType name="referenceFunctionType">
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="category" type="xs:string" use="required"/>
<xs:attribute name="subCategory" type="xs:string" use="required"/>
</xs:complexType>
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element name="dataset" type="datasetType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Now I want to define the referenceFunction/@category attribute of the dataset to be a foreign key to the categories table. Is it possible at all to do that with constraints? After failing with the nested table approach I really do not have any clue I would greatly appreciate any hints.
Thanks,
oliNested tables do not currently support referential integrity.
Foreign Keys on elements with maxOccurs > 0 -
Insert XML file into Relational database model without using XMLTYPE tables
Dear all,
How can I store a known complex XML file into an existing relational database WITHOUT using xmltypes in the database ?
I read the article on DBMS_XMLSTORE. DBMS_XMLSTORE indeed partially bridges the gap between XML and RDBMS to a certain extent, namely for simply structured XML (canonical structure) and simple tables.
However, when the XML structure will become arbitrary and rapidly evolving, surely there must be a way to map XML to a relational model more flexibly.
We work in a java/Oracle10 environment that receives very large XML documents from an independent data management source. These files comply with an XML schema. That is all we know. Still, all these data must be inserted/updated daily in an existing relational model. Quite an assignment isn't it ?
The database does and will not contain XMLTYPES, only plain RDBMS tables.
Are you aware of a framework/product or tool to do what DBMS_XMLSTORE does but with any format of XML file ? If not, I am doomed.
Constraints : Input via XML files defined by third party
Storage : relational database model with hundreds of tables and thousands of existing queries that can not be touched. The model must not be altered.
Target : get this XML into the database on a daily basis via an automated process.
Cheers.
Luc.Luc,
your Doomed !
If you would try something like DBMS_XMLSTORE, you probably would be into serious performance problems in your case, very fast, and it would be very difficult to manage.
If you would use a little bit of XMLType stuff, you would be able to shred the data into the relational model very fast and controlable. Take it from me, I am one of those old geezers like Mr. Tom Kyte way beyond 40 years (still joking). No seriously. I started out as a classical PL/SQL, Forms Guy that switched after two years to become a "DBA 1.0" and Mr Codd and Mr Date were for years my biggest hero's. I have the utmost respect for Mr. Tom Kyte for all his efforts for bringing the concepts manual into the development world. Just to name some off the names that influenced me. But you will have to work with UNSTRUCTURED data (as Mr Date would call it). 80% of the data out there exists off it. Stuff like XMLTABLE and XML VIEWs bridge the gap between that unstructured world and the relational world. It is very doable to drag and drop an XML file into the XMLDB database into a XMLtype table and or for instance via FTP. From that point on it is in the database. From there you could move into relational tables via XMLTABLE methods or XML Views.
You could see the described method as a filtering option so XML can be transformed into relational data. If you don't want any XML in your current database, then create an small Oracle database with XML DB installed (if doable 11.1.0.7 regarding the best performance --> all the new fast optimizer stuff etc). Use that database as a staging area that does all the XML shredding for you into relational components and ship the end result via database links and or materialized views or other probably known methodes into your relational database that isn't allowed to have XMLType.
This way you would keep your realtional Oracle database clean and have the Oracle XML DB staging database do all the filtering and shredding into relational components.
Throwing the XML DB option out off the window beforehand would be like replacing your Mercedes with a bicycle. With both you will be able to travel the distance from Paris to Rome, but it will take you a hell of lot longer.
:-) -
Insert data into the xml schema-based xmltype table problem!
Hello, there,
I got problem in inserting data into the xmltype table after registered XML schema and created table. details see below:
1) xml schema:
<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSpy v2007 sp2 (http://www.altova.com) by Constantin Ilea (EMERGIS INC) -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.emergis.com/eHealth/EHIP/data/meta/profile:v1" targetNamespace="http://www.emergis.com/eHealth/EHIP/data/meta/profile:v1" elementFormDefault="qualified">
<!-- ************** PART I: BEGIN SIMPLE OBJECT TYPE DEFINITIONS ********************************** -->
<xs:simpleType name="RoutingType">
<xs:restriction base="xs:string">
<xs:enumeration value="Synch"/>
<xs:enumeration value="Asynch"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="StatusType">
<xs:restriction base="xs:string">
<xs:enumeration value="ACTIVE"/>
<xs:enumeration value="VOID"/>
<xs:enumeration value="PENDING"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="SenderApplicationType">
<xs:restriction base="xs:string">
<xs:enumeration value="PR"/>
<xs:enumeration value="CR"/>
<xs:enumeration value="POS"/>
<xs:enumeration value="CPP"/>
<xs:enumeration value="Other"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="ServiceTypeType">
<xs:restriction base="xs:string">
<xs:enumeration value="IS"/>
<xs:enumeration value="WS"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="RouteDirect">
<xs:restriction base="xs:string">
<xs:enumeration value="Request"/>
<xs:enumeration value="Reply"/>
<xs:enumeration value="None"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="Indicator">
<xs:annotation>
<xs:documentation>can we also change the value to "ON" and "OFF" instead? in this way this cn be shared by all type of switch indicator</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:enumeration value="YES"/>
<xs:enumeration value="NO"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="RuleType">
<xs:restriction base="xs:string">
<xs:enumeration value="ControlAct"/>
<xs:enumeration value="WSPolicy"/>
<xs:enumeration value="AccessControl"/>
<xs:enumeration value="Certification"/>
<xs:enumeration value="MessageConformance"/>
<xs:enumeration value="Variant"/>
<xs:enumeration value="Routing"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="HL7Result">
<xs:restriction base="xs:string">
<xs:enumeration value="ACCEPT"/>
<xs:enumeration value="REFUSE"/>
<xs:enumeration value="REJECT"/>
<xs:enumeration value="ACK"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="IIPType">
<xs:restriction base="xs:string">
<xs:enumeration value="PUT"/>
<xs:enumeration value="GET/LIST"/>
<xs:enumeration value="NOTIF"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="ProfileTypeType">
<xs:restriction base="xs:string">
<xs:enumeration value="IIPProfile"/>
<xs:enumeration value="BizOperationProfile"/>
<xs:enumeration value="OrchestrationProfile"/>
<xs:enumeration value="DomainObjectProfile"/>
<xs:enumeration value="ServiceProfile"/>
<xs:enumeration value="ExceptionProfile"/>
<xs:enumeration value="CustomizedProfile"/>
<xs:enumeration value="SystemProfile"/>
<xs:enumeration value="HL7XMLSchemaProfile"/>
<xs:enumeration value="EnricherParametersProfile"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="ParameterType">
<xs:restriction base="xs:string">
<xs:enumeration value="String"/>
<xs:enumeration value="Object"/>
<xs:enumeration value="Number"/>
<xs:enumeration value="Document"/>
</xs:restriction>
</xs:simpleType>
<!-- ************** PART I: END SIMPLE OBJECT TYPE DEFINITIONS ********************************** -->
<!-- ************** PART II: BEGIN COMPLEX OBJECT TYPE DEFINITIONS ********************************** -->
<!-- *********************** begin new added objects, by rshan *************************************** -->
<xs:complexType name="ProfileType">
<xs:annotation>
<xs:documentation>
1.Profile IS USED TO BE AN WRAPPER ELEMENT FOR ALL KIND OF PROFILES NO MATTER WHAT KIND OF PROFILE IT IS
2.ProfileID used to uniquely identify the current profile
3.ProfileData used to hold all the necessary profile related data
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="ProfileID" type="ProfileIDType">
<xs:annotation>
<xs:documentation>this will hold all the common attributes, espically the global unique identifier to the profile, no matter what type of profile is</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="ProfileData" type="ProfileDataType">
<xs:annotation>
<xs:documentation>all the non-common profile meta data that attached to each specific profile type such as IIPProfile, OrchestrationProfile, and BizOperationProfile will be placed here</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ProfileIDType">
<xs:annotation>
<xs:documentation>global unique identifier and all the common attributes across all different profiles, the @ID and @Type together will be used as the primary key to identify the profile data</xs:documentation>
</xs:annotation>
<xs:attribute name="ID" type="xs:ID" use="required">
<xs:annotation>
<xs:documentation>ID is the global unique identifier to the profile, no matter what type of profile it is</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="Name"/>
<xs:attribute name="Description"/>
<xs:attribute name="Version">
<xs:annotation>
<xs:documentation>version of the profile data</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="Type" type="ProfileTypeType" use="required">
<xs:annotation>
<xs:documentation>value to identify the ProfileType type within
IIPProfile,BizOperationProfile,OrchestrationProfile,DomainObjectProfile
ServiceProfile,ExceptionProfile,SystemProfile,HL7XMLSchemaProfile,
EnricherParametersProfile,CustomizedProfile
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="Status" type="StatusType" default="ACTIVE">
<xs:annotation>
<xs:documentation>used to show the related profile data status like "ACTIVE","PENDING","VOID"...</xs:documentation>
</xs:annotation>
</xs:attribute>
<!--
<xs:sequence>
<xs:element name="ProfileReference" type="ProfileIDType" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>this will be the place to hold the integrity relationship with other profiles like foreign key if existed and necessary to show up</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
-->
</xs:complexType>
<xs:complexType name="ProfileDataType">
<xs:annotation>
<xs:documentation>meta data associated tightly to each specific type of profile</xs:documentation>
</xs:annotation>
<xs:choice>
<xs:element name="EnricherParametersProfileData" type="EnricherParametersDataType">
<xs:annotation>
<xs:documentation>Enricher Parameters related profile data
1. one instance of this type may contains all the related System metadata.
2. idType part may use to identify different version/release/status
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="ExtendProfileData" type="ExtendProfileDataType">
<xs:annotation>
<xs:documentation>If needed, any profile data not defined within the current release scope can be added here </xs:documentation>
</xs:annotation>
</xs:element>
</xs:choice>
</xs:complexType>
<xs:complexType name="ExtendProfileDataType">
<xs:sequence>
<xs:element name="ExtendProfile" type="xs:anyType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="EnricherParametersDataType">
<xs:sequence>
<xs:element name="EnricherParameter" type="EnricherParameter" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="EnricherParameter">
<xs:sequence>
<xs:element ref="Enricher"/>
</xs:sequence>
<xs:attribute name="serviceName" type="xs:string" use="required"/>
<xs:attribute name="interactionID" type="xs:string"/>
</xs:complexType>
<xs:element name="Enricher">
<xs:annotation>
<xs:documentation>Comment describing your root element</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="Parameters" type="Parameters"/>
<xs:element ref="Section" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="ValueType">
<xs:attribute name="field" use="required"/>
<xs:attribute name="value"/>
<xs:attribute name="action"/>
</xs:complexType>
<xs:element name="Section">
<xs:complexType>
<xs:sequence>
<xs:element name="Value" type="ValueType" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="Section" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="path" use="required"/>
</xs:complexType>
</xs:element>
<xs:complexType name="Parameters">
<xs:sequence>
<xs:element name="Parameter" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="name" use="required"/>
<xs:attribute name="reference"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="RuleList">
<xs:annotation>
<xs:documentation>an array of rules</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="Rule" type="RuleProfile" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="RuleProfile">
<xs:attribute name="RName" use="required"/>
<xs:attribute name="RType" type="RuleType" use="required"/>
<xs:attribute name="Status" default="ON">
<xs:annotation>
<xs:documentation>By default is ON (or if is missing)</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="Order"/>
<xs:attribute name="Direction" type="RouteDirect">
<xs:annotation>
<xs:documentation>Request / Reply</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
<!-- ************** PART II: END COMPLEX OBJECT TYPE DEFINITIONS *********************************** -->
<!-- ************** PART III: BEGIN ROOT ELEMENTS DEFINITIONS ********************************* -->
<!-- 0) Profile wrapper root element
Profile IS USED TO BE AN WRAPPER ELEMENT FOR ALL KIND OF PROFILES NO MATTER WHAT KIND OF PROFILE IT IS
-->
<xs:element name="Profile" type="ProfileType">
<xs:annotation>
<xs:documentation>Profile IS USED TO BE AN WRAPPER ELEMENT FOR ALL KIND OF PROFILES NO MATTER WHAT KIND OF PROFILE IT IS</xs:documentation>
</xs:annotation>
</xs:element>
</xs:schema>
2)register xml schema:
SQL> begin
2 dbms_xmlschema.registerSchema
3 (
4 schemaurl=>'http://rac3-1-vip:8080/home/'||USER||'/xsd/EHIPProfile_v00.xsd',
5 schemadoc=>xdbURIType('/home/'||USER||'/xsd/EHIPProfile_v00.xsd').getClob(),
6 local=>True,
7 gentypes=>True,
8 genbean=>False,
9 gentables=>False
10 );
11 End;
12 /
PL/SQL procedure successfully completed.
SQL>
SQL>
3) xml data:
<?xml version="1.0" encoding="UTF-8"?>
<!--Sample XML file generated by XMLSpy v2007 sp2 (http://www.altova.com)-->
<Profile xmlns="http://www.emergis.com/eHealth/EHIP/data/meta/profile:v1">
<ProfileID Type="EnricherParametersProfile" Status="ACTIVE" ID="EnricherPP.ID.0001" Name="EnricherPP.ID.0001" Description="EnricherPP.ID.0001" Version="01"/>
<ProfileData>
<EnricherParametersProfileData>
<EnricherParameter serviceName="LRS_BusinessDomainObject.lrs.businessDomainObject.domainObjectBuilder.concrete.ExceptionCreators:createExceptionV50CategoryCanonicalPart" interactionID="">
<Enricher>
<Parameters>
<Parameter name="MESSAGE_ID" reference="test"/>
</Parameters>
<Section path="HEADER">
<Section path="RESPONSE_TYPE">
<Value field="value" value="I"/>
</Section>
<Section path="HL7_STANDARD_VERSION">
<Value field="value" value="HL7V3"/>
</Section>
<Section path="DESIRED_ACKNOWLEDGMENT_TYPE">
<Value field="value" value="NE"/>
</Section>
<Section path="SENDING_NETWORK_ADDRESS">
<Value field="value" value=""/>
</Section>
<Section path="SENDING_APPLICATION_IDENTIFIER">
<Value field="root" value="2.16.840.1.113883.3.133.1.3"/>
<Value field="extension" value=""/>
</Section>
<Section path="SENDING_APPLICATION_NAME">
<Value field="value" value="NL HIAL"/>
</Section>
</Section>
</Enricher>
</EnricherParameter>
<EnricherParameter serviceName="LRS_BusinessDomainObject.lrs.businessDomainObject.domainObjectBuilder.concrete.DomainObjectCreators:createFindClientsAssociatedIdentifersRequestObject" interactionID="PRPA_IN101105CA">
<Enricher>
<Parameters>
<Parameter name="MESSAGE_ID" reference="test"/>
</Parameters>
<Section path="HEADER">
<Section path="RESPONSE_TYPE">
<Value field="value" value="I"/>
</Section>
<Section path="HL7_STANDARD_VERSION">
<Value field="value" value="HL7V3"/>
</Section>
<Section path="PROCESSING_CODE">
<Value field="value" value="T"/>
</Section>
<!--
<Section path="PROCESSING_MODE_CODE">
<Value field="value" value="T"/>
</Section>
-->
<Section path="DESIRED_ACKNOWLEDGMENT_TYPE">
<Value field="value" value="NE"/>
</Section>
<Section path="RECEIVER_NETWORK_ADDRESS">
<Value field="value" value="prsunew.moh.hnet.bc.ca"/>
</Section>
<Section path="RECEIVER_APPLICATION_IDENTIFIER">
<Value field="root" value="2.16.840.1.113883.3.40.5.1"/>
<Value field="extension" value=""/>
</Section>
<Section path="SENDING_NETWORK_ADDRESS">
<Value field="value" value=""/>
</Section>
<Section path="SENDING_APPLICATION_IDENTIFIER">
<Value field="root" value="2.16.840.1.113883.3.133.1.3"/>
<Value field="extension" value=""/>
</Section>
<Section path="SENDING_APPLICATION_NAME">
<Value field="value" value="NL HIAL"/>
</Section>
</Section>
</Enricher>
</EnricherParameter>
<EnricherParameter serviceName="LRS_BusinessDomainObject.lrs.businessDomainObject.domainObjectBuilder.concrete.DomainObjectContentEnrichers:enrichPRRequest" interactionID="">
<!--Sample XML file generated by XMLSpy v2007 sp2 (http://www.altova.com)-->
<Enricher>
<Parameters>
<Parameter name="MESSAGE_IDENTIFIER" reference="test"/>
</Parameters>
<Section path="HEADER">
<Section path="HL7_STANDARD_VERSION">
<Value field="value" value="V3PR2"/>
</Section>
<!--POS/CPP populated ?-->
<!--Not sure if this should be set as a variance within EHIP or if we expect the POS/CPP to provide this value-->
<Section path="PROCESSING_CODE">
<Value field="value" value="T"/>
</Section>
<!--POS/CPP populated ?-->
<Section path="PROCESSING_MODE_CODE">
<Value field="value" value="T"/>
</Section>
<!--POS/CPP populated ?-->
<Section path="DESIRED_ACKNOWLEDGMENT_TYPE">
<Value field="value" value="NE"/>
</Section>
<!-- note:We Expect PRS to give us a web service address -->
<!--<Section path="RECEIVER_NETWORK_ADDRESS">
<Value field="value" value="_http://PRSServer/svcName"/>
</Section>
-->
<Section path="RECEIVER_APPLICATION_IDENTIFIER[0]">
<Value field="root" value="2.16.840.1.113883.3.40.1.14"/>
<Value field="extension" value="SIT1"/>
</Section>
<!-- note: values of the fields to be provided by PRS -->
<Section path="RECEIVER_APPLICATION_NAME[0]">
<Value field="value" value="receiverAppName"/>
</Section>
<!-- note: RECEIVER_ORGANIZATION has an extra trailing space, as in the Excel mapping spreadsheet -->
<!-- note: values of the fields to be specified by PRS later -->
<Section path="RECEIVER_AGENT/RECEIVER_ORGANIZATION/RECEIVER_ORGANIZATION_IDENTIFIER[0]">
<Value field="root" value="2.16.840.1.113883.3.40.4.1"/>
<Value field="extension" value="receiverOrgId"/>
</Section>
<Section path="SENDING_APPLICATION_NAME[0]">
<Value field="value" value="NLPRSCLNT"/>
</Section>
<!-- note: SENDING_ORGANIZATION has an extra trailing space, as in the Excel mapping spreadsheet -->
<!-- note: values of the fields to be specified by PRS later -->
<Section path="SENDING_AGENT/SENDING_ORGANIZATION/SENDING_ORGANIZATION_IDENTIFIER[0]">
<Value field="root" value="2.16.840.1.113883.4.3.57"/>
<Value field="extension" value="3001"/>
</Section>
<Section path="PERFORMER/HEALTHCARE_WORKER_IDENTIFIER[0]">
<Value field="root" value="2.16.840.1.113883.4.3.57"/>
<Value field="extension" value="HIAL_USR"/>
</Section>
</Section>
<Section path="PAYLOAD">
<!--<Section path="QUERY_STATUS_CODE">
<Value field="value" value="New"/>
</Section>-->
<!-- note: AUDIT has an extra trailing space, as in the Excel mapping spreadsheet -->
<Section path="AUDIT[0]/AUDIT_INFORMATION">
<Value field="code" value="LATEST"/>
<Value field="codeSystem" value="PRSAuditParameters"/>
</Section>
<!-- note: CONFIDENCE has an extra trailing space, as in the Excel mapping spreadsheet -->
<Section path="CONFIDENCE/CONFIDENCE_VALUE">
<Value field="value" value="100"/>
</Section>
<!-- note: HISTORY has an extra trailing space, as in the Excel mapping spreadsheet -->
<Section path="HISTORY/INCLUDE_HISTORY_INDICATOR">
<Value field="value" value="false"/>
</Section>
<!-- note: JURISDICTION has an extra trailing space, as in the Excel mapping spreadsheet -->
<Section path="JURISDICTION/JURISDICTION_TYPE">
<Value field="value" value="NL"/>
</Section>
<!-- note: RESPONSE_OBJECT has an extra trailing space, as in the Excel mapping spreadsheet -->
<Section path="RESPONSE_OBJECT[0]/PROVIDER_QUERY_RESPONSE_OBJECT[0]">
<Value field="code" value="GRS_ADDRESS"/>
</Section>
<Section path="RESPONSE_OBJECT[0]/PROVIDER_QUERY_RESPONSE_OBJECT[1]">
<Value field="code" value="GRS_ELECTRONIC_ADDRESS"/>
</Section>
<Section path="RESPONSE_OBJECT[0]/PROVIDER_QUERY_RESPONSE_OBJECT[2]">
<Value field="code" value="GRS_IDENTIFIER"/>
</Section>
<Section path="RESPONSE_OBJECT[0]/PROVIDER_QUERY_RESPONSE_OBJECT[3]">
<Value field="code" value="GRS_ORGANIZATION_NAME"/>
</Section>
<Section path="RESPONSE_OBJECT[0]/PROVIDER_QUERY_RESPONSE_OBJECT[4]">
<Value field="code" value="GRS_PERSONAL_NAME"/>
</Section>
<Section path="RESPONSE_OBJECT[0]/PROVIDER_QUERY_RESPONSE_OBJECT[5]">
<Value field="code" value="GRS_REGISTRY_IDENTIFIER"/>
</Section>
<Section path="RESPONSE_OBJECT[0]/PROVIDER_QUERY_RESPONSE_OBJECT[6]">
<Value field="code" value="GRS_TELEPHONE"/>
</Section>
<Section path="RESPONSE_OBJECT[0]/PROVIDER_QUERY_RESPONSE_OBJECT[7]">
<Value field="code" value="PRS_CONDITION"/>
</Section>
<Section path="RESPONSE_OBJECT[0]/PROVIDER_QUERY_RESPONSE_OBJECT[8]">
<Value field="code" value="PRS_CONFIDENTIALITY_INDICATOR"/>
</Section>
<Section path="RESPONSE_OBJECT[0]/PROVIDER_QUERY_RESPONSE_OBJECT[9]">
<Value field="code" value="PRS_DEMOGRAPHIC_DETAIL"/>
</Section>
<Section path="RESPONSE_OBJECT[0]/PROVIDER_QUERY_RESPONSE_OBJECT[10]">
<Value field="code" value="PRS_DISCIPLINARY_ACTION"/>
</Section>
<Section path="RESPONSE_OBJECT[0]/PROVIDER_QUERY_RESPONSE_OBJECT[11]">
<Value field="code" value="PRS_INFORMATION_ROUTE"/>
</Section>
<Section path="RESPONSE_OBJECT[0]/PROVIDER_QUERY_RESPONSE_OBJECT[12]">
<Value field="code" value="PRS_NOTE"/>
</Section>
<Section path="RESPONSE_OBJECT[0]/PROVIDER_QUERY_RESPONSE_OBJECT[13]">
<Value field="code" value="PRS_PROVIDER_CREDENTIAL"/>
</Section>
<Section path="RESPONSE_OBJECT[0]/PROVIDER_QUERY_RESPONSE_OBJECT[14]">
<Value field="code" value="PRS_PROVIDER_EXPERTISE"/>
</Section>
<Section path="RESPONSE_OBJECT[0]/PROVIDER_QUERY_RESPONSE_OBJECT[15]">
<Value field="code" value="PRS_PROVIDER_RELATIONSHIP"/>
</Section>
<Section path="RESPONSE_OBJECT[0]/PROVIDER_QUERY_RESPONSE_OBJECT[16]">
<Value field="code" value="PRS_STATUS"/>
</Section>
<Section path="RESPONSE_OBJECT[0]/PROVIDER_QUERY_RESPONSE_OBJECT[17]">
<Value field="code" value="PRS_WORK_LOCATION"/>
</Section>
<Section path="RESPONSE_OBJECT[0]/PROVIDER_QUERY_RESPONSE_OBJECT[18]">
<Value field="code" value="PRS_WORK_LOCATION_ADDRESS"/>
</Section>
<Section path="RESPONSE_OBJECT[0]/PROVIDER_QUERY_RESPONSE_OBJECT[19]">
<Value field="code" value="PRS_WORK_LOCATION_DETAIL"/>
</Section>
<Section path="RESPONSE_OBJECT[0]/PROVIDER_QUERY_RESPONSE_OBJECT[20]">
<Value field="code" value="PRS_WORK_LOCATION_ELECTRONIC_ADDRESS"/>
</Section>
<Section path="RESPONSE_OBJECT[0]/PROVIDER_QUERY_RESPONSE_OBJECT[21]">
<Value field="code" value="PRS_WORK_LOCATION_INFORMATION_ROUTE"/>
</Section>
<Section path="RESPONSE_OBJECT[0]/PROVIDER_QUERY_RESPONSE_OBJECT[22]">
<Value field="code" value="PRS_WORK_LOCATION_TELEPHONE"/>
</Section>
<!-- note: ROLE_CLASS has an extra trailing space, as in the Excel mapping spreadsheet -->
<Section path="ROLE_CLASS /ROLE_CLASS_VALUE">
<Value field="value" value="LIC"/>
</Section>
<Section path="SORT_CONTROL[0]/SORT_CONTROL_ELEMENT_NAME">
<Value field="code" value="PrincipalPerson.name.value.family"/>
</Section>
<Section path="SORT_CONTROL[0]/SORT_CONTROL_DIRECTION_CODE">
<Value field="value" value="A"/>
</Section>
</Section>
</Enricher>
</EnricherParameter>
</EnricherParametersProfileData>
</ProfileData>
</Profile>
the data is valid against the schema through XML Spy tool... and loaded into the XDB repository...
4) create table and insert data:
SQL> CREATE TABLE EHIP_PROFILE OF SYS.XMLTYPE
2 XMLSCHEMA "http://rac3-1-vip:8080/home/EHIPSBUSER1/xsd/EHIPProfile_v00.xsd" ELEMENT "Profile"
3 ;
Table created.
SQL>
SQL> alter table EHIP_PROFILE
2 add CONSTRAINT EHIP_PROF_PK PRIMARY KEY(XMLDATA."ProfileID"."ID",XMLDATA."ProfileID"."Type");
Table altered.
SQL>
SQL>
SQL>
SQL>
SQL> select xdbURIType('/home/'||USER||'/ProfileData/EnricherPP.ID.0001.xml').getClob() from dual;
XDBURITYPE('/HOME/'||USER||'/PROFILEDATA/ENRICHERPP.ID.0001.XML').GETCLOB()
<?xml version="1.0" encoding="UTF-8"?>
<!--Sample XML file generated by XMLSpy
SQL>
SQL>
SQL> insert into ehip_profile values(xmltype.createXML(xdbURIType('/home/'||USER||'/ProfileData/EnricherPP.ID.0001.xml').getClob()));
insert into ehip_profile values(xmltype.createXML(xdbURIType('/home/'||USER||'/ProfileData/EnricherPP.ID.0001.xml').getClob()))
ERROR at line 1:
ORA-21700: object does not exist or is marked for delete
what's the problem caused the "ORA-21700: object does not exist or is marked for delete" error?
Thanks in advance for your help?Thanks Marco,
Here're my environment:
SQL> select INSTANCE_NUMBER, INSTANCE_NAME,HOST_NAME,VERSION from v$instance;
INSTANCE_NUMBER INSTANCE_NAME HOST_NAME VERSION
2 rac32 RAC3-2 10.2.0.3.0
I followed your suggested in the above, and always purge recyclebin, but still got the same problem. because in 10gr2, there's no dbms_xmlschema.purge_schema available,
and I did checked the recyclebin after force the delete of schema, nothing inside. any other recommendation? -
I cannot see XMLType table in sql*plus
Hi,
Although I have wokred extensively with Oracle, I am new to Oracle XMLdb. My problem is I cannot see the XMLType tables created under my schema. I can see the tables when I do a select from user_xml_tables. But if I do a 'desc' or 'select from', I get ORA-04043 or ORA-00942. I can desc an XMLType table owned by xdb. I am using Oralce 10g. Please provide a solution asap as a customer is waiting on this.
Thanks,
Jayati RayRaghu !!
GREAT!!!
It was a BUG in Oracle sql developer, I installed the new version v3.0, It WORKS like a CHARM.
Thanks a million for your help!!!
Cheers
Tony -
How to delete an .xml file from xmltype table?
Hi expert,
I am in I am in Oracle Enterprise Manager 11g 11.2.0.1.0.
SQL*Plus: Release 11.2.0.1.0 Production on Tue Feb 22 11:40:23 2011
I have inserted 3 .xml files into an xmltype table: DOCUMENT
SQL> SELECT OBJECT_VALUE FROM document;
OBJECT_VALUE
<?xml version="1.0" encoding="WINDOWS-1252"?>
<?xml-stylesheet href="http://www.accessdata.fda.gov/spl/stylesheet/spl.xsl" type="text/xsl"?>
<document xmlns="urn:hl7-org:v3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLoc
ation="urn:hl7-org:v3 http://localhost:8080/home/DEV/xsd/spl.xsd" classCode="DOC">
<id root="5ca4e3cb-7298-4948-8cc2-58e71ad32694"/>
<code code="51725-0" c
<?xml version="1.0" encoding="WINDOWS-1252"?>
<?xml-stylesheet href="http://www.accessdata.fda.gov/spl/stylesheet/spl.xsl" type="text/xsl"?>
<document xmlns="urn:hl7-org:v3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLoc
ation="urn:hl7-org:v3 http://localhost:8080/home/DEV/xsd/spl.xsd" classCode="DOC">
<id root="03d6a2cd-fdda-4fe1-865d-da0db9212f34"/>
<code code="51725-0" c
<?xml version="1.0" encoding="WINDOWS-1252"?>
<?xml-stylesheet href="http://www.accessdata.fda.gov/spl/stylesheet/spl.xsl" type="text/xsl"?>
<document xmlns="urn:hl7-org:v3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLoc
ation="urn:hl7-org:v3 http://localhost:8080/home/DEV/xsd/spl.xsd" classCode="DOC">
<id root="09ff06d6-8b85-43dd-b5cc-e22d00f02bd0"/>
<code code="51725-0" c
I tried to delete one xml file which with id root="03d6a2cd-fdda-4fe1-865d-da0db9212f34'
delete from DOCUMENT
where xmlexists('$p/document/id[@root="03d6a2cd-fdda-4fe1-865d-da0db9212f34"]'PASSING OBJECT_VALUE AS "p");
but failed.
Is there any expert can help?
Thanks a lot!
Cow
Edited by: Cow on Mar 11, 2011 7:02 PMHi,
Namespace issue.
You have to declare it in the XQuery prolog :
DELETE FROM document
WHERE XMLExists( 'declare default element namespace "urn:hl7-org:v3"; (::)
$p/document/id[@root=$root_value]'
passing object_value as "p",
'03d6a2cd-fdda-4fe1-865d-da0db9212f34' as "root_value" )
; -
The size of a XML document stored in a XMLType table
Is there a way to find out (via SQL) the size of a XML document stored in a XMLType table or XMLType column (storage OR based)?
For instance in the way you could it retrieve if the XML document was stored in an XMLType column (CLOB based)
SQL> r
1 select dbms_lob.getlength(t.gegevens.getclobval()) "SIZE"
2 from hgo.hgo010_detam t
3* where rownum < 2
SIZE
2750Is there a way to find out (via SQL) the size of a XML document stored in a XMLType table or XMLType column (storage OR based)?
For instance in the way you could it retrieve if the XML document was stored in an XMLType column (CLOB based)
SQL> r
1 select dbms_lob.getlength(t.gegevens.getclobval()) "SIZE"
2 from hgo.hgo010_detam t
3* where rownum < 2
SIZE
2750 -
How to create a relational view base on an xmltype table which included sev
Hi,
I am using oracle 11.2.0.1.0.
how to create a relational view base on an xmltype table which content several different .xml files?
Thanks.
for examle:
SQL> SELECT OBJECT_VALUE FROM document;
Edited by: Cow on Jan 6, 2011 7:57 PMFor example I already have these three xml files inserted into the document xmltype table.
These xml files have same schemas. I have attached below.
I want to show all elements/attribute values in xml files to relational view.
Is this possible to create one big relational view to show everything
or I have to create three separate relation views then use UNION to put together? Thanks a lot. Cow
<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="http://www.accessdata.fda.gov/spl/stylesheet/spl.xsl" type="text/xsl"?>
<document xmlns="urn:hl7-org:v3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:hl7-org:v3 http://localhost:8080/home/DEV/xsd/spl.xsd">
<id root="5ca4e3cb-7298-4948-8cc2-58e71ad32694"/>
</component>
</document>
<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="http://www.accessdata.fda.gov/spl/stylesheet/spl.xsl" type="text/xsl"?>
<document xmlns="urn:hl7-org:v3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:hl7-org:v3 http://localhost:8080/home/DEV/xsd/spl.xsd">
</component>
</document>
Edited by: Cow on Jan 4, 2011 9:51 AM -
XMLType table Core Dump using CLOB
I've created an object based XMLType table based on a valid XML Schema. The Schema has an element which has been declared as a CLOB.
<xs:element name="complete_entry" xdb:SQLType="CLOB" xdb:SQLName="complete_entry"/>
This registers ok with Oracle and the object that this element is in shows the element as a CLOB as expected.
However when performing a insert into this table, SQLPlus gives and end-of-communication error and the server core dumps.
A PL/SQL function retreives an XML file from the file system for insert, here is the code for the function:
create or replace function getClobDocument(
filename in varchar2,
charset in varchar2 default NULL)
return CLOB deterministic
is
file bfile := bfilename('DIR',filename);
charContent CLOB := ' ';
targetFile bfile;
lang_ctx number := DBMS_LOB.default_lang_ctx;
charset_id number := 0;
src_offset number := 1 ;
dst_offset number := 1 ;
warning number;
begin
if charset is not null then
charset_id := NLS_CHARSET_ID(charset);
end if;
targetFile := file;
DBMS_LOB.fileopen(targetFile, DBMS_LOB.file_readonly);
DBMS_LOB.LOADCLOBFROMFILE(charContent, targetFile,
DBMS_LOB.getLength(targetFile), src_offset, dst_offset,
charset_id, lang_ctx,warning);
DBMS_LOB.fileclose(targetFile);
return charContent;
end;
The function is called like so:
INSERT INTO boss_contracts
VALUES(XMLTYPE(getCLOBDocument('contract_82.xml','UTF8')));
This works perfectly when the element is declared as a string and Oracle converts it to a varchar2(4000), but core dumps when it is a CLOB.
I need this element to be able to handle more than 4k of data.
please help,
Paul Linney
[email protected]void print_affect(struct oci_connection* conn, OCIStmt* sh) {
sb2 rowCount;
ub4 sizep = sizeof(sb2);
OCIAttrGet(sh, OCI_HTYPE_STMT,&rowCount,
&sizep,OCI_ATTR_ROW_COUNT, conn->err);OCI_ATTR_ROW_COUNT is a ub4 attribute, not a sb2 one.
ub4 rowCount = 0;
ub4 size = sizeof(rowCount);
--DD -
Problem in select of xmltype table
Hi,
i have a xmltype table with an object type/atrribute of datatype CLOB. When i now do a query i get the error ORA-22835 - what's going wrong? The datatype of the source attribute and the declared variable is CLOB.
DECLARE
vFoto CLOB;
BEGIN
SELECT SUBSTR(pe.foto_pass, 1, 100) INTO vFoto
FROM fp_epass_pass_antraege pa
, XMLTABLE('/PassAntrag'
PASSING pa.sys_nc_rowinfo$
COLUMNS antrag XMLTYPE PATH '/PassAntrag/Antrag'
, person XMLTYPE PATH '/PassAntrag/Person') paan
, XMLTABLE('/'
PASSING paan.antrag
COLUMNS uuid VARCHAR2(38) PATH 'UUID') an
, XMLTABLE('/'
PASSING paan.person
COLUMNS foto_pass CLOB PATH 'FotoPass') pe
WHERE an.uuid = '84239536904120131828493266953553299522';
END;Many thanks in advance.
Regards,
MartinHi Odie,
i thoght taht's a PL/SQL problem ;-)
Versions:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
PL/SQL Release 11.2.0.2.0 - Production
CORE 11.2.0.2.0 Production
TNS for IBM/AIX RISC System/6000: Version 11.2.0.2.0 - Production
NLSRTL Version 11.2.0.2.0 - Production
<?xml version="1.0" encoding="ISO-8859-15" standalone='no'?>
<PassAntrag>
<Antrag>
<UUID>53075802924980786961041180181729965505</UUID>
<DocTyp>ID</DocTyp>
<Antragsgrund>EAN</Antragsgrund>
<AntragDatum>06.02.2013</AntragDatum>
<AntragOrt/>
</Antrag>
<Person>
<Name>Zillweger</Name>
<Vorname>Michel</Vorname>
<Geburtsdatum>16.06.1964</Geburtsdatum>
<Geschlecht>M</Geschlecht>
<Passtitel/>
<Groesse>178</Groesse>
<Strasse>Riverside Ave</Strasse>
<Hausnummer>4</Hausnummer>
<PLZ>23413454</PLZ>
<Ort>New York</Ort>
<LandIso316613>USA</LandIso316613>
<Telefon>2314132413</Telefon>
<Email/>
<Versand>EDA</Versand>
<Lieferadresse>Switzerland Embassy , United States
20008-3499
Washington DC
District of Columbia
USA</Lieferadresse>
<BesKennz/>
<NameVornameVater>Zillweger André</NameVornameVater>
<LedNameVornameMutter>Voirol Odile</LedNameVornameMutter>
<NameVornameEhepartner>Zillweger Françoise</NameVornameEhepartner>
<NameVornameVertreter/>
<FotoID></FotoID>
<FotoPass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
<SignID>LzlqLzRBQVFTa1pKUmdBQkFnQUFBUUFCQUFELzJ3QkRBQWdHQmdjR0JRZ0hCd2NKQ1FnS0RCUU5EQXNMREJrU0V3OFVIUm9mSGgwYUhCd2dKQzRuSUNJc0l4d2NLRGNwTERBeE5EUTBIeWM1UFRneVBDNHpOREwvMndCREFRa0pDUXdMREJnTkRSZ3lJUndoTWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qSXlNakl5TWpJeU1qTC93QUFSQ0FEWkFrOERBU0lBQWhFQkF4RUIvOFFBSHdBQUFRVUJBUUVCQVFFQUFBQUFBQUFBQUFFQ0F3UUZCZ2NJQ1FvTC84UUF0UkFBQWdFREF3SUVBd1VGQkFRQUFBRjlBUUlEQUFRUkJSSWhNVUVHRTFGaEJ5SnhGREtCa2FFSUkwS3h3UlZTMGZBa00ySnlnZ2tLRmhjWUdSb2xKaWNvS1NvME5UWTNPRGs2UTBSRlJrZElTVXBUVkZWV1YxaFpXbU5rWldabmFHbHFjM1IxZG5kNGVYcURoSVdHaDRpSmlwS1RsSldXbDVpWm1xS2pwS1dtcDZpcHFyS3p0TFcydDdpNXVzTER4TVhHeDhqSnl0TFQxTlhXMTlqWjJ1SGk0K1RsNXVmbzZlcng4dlAwOWZiMytQbjYvOFFBSHdFQUF3RUJBUUVCQVFFQkFRQUFBQUFBQUFFQ0F3UUZCZ2NJQ1FvTC84UUF0UkVBQWdFQ0JBUURCQWNGQkFRQUFRSjNBQUVDQXhFRUJTRXhCaEpCVVFkaGNSTWlNb0VJRkVLUm9iSEJDU016VXZBVlluTFJDaFlrTk9FbDhSY1lHUm9tSnlncEtqVTJOemc1T2tORVJVWkhTRWxLVTFSVlZsZFlXVnBqWkdWbVoyaHBhbk4wZFhaM2VIbDZnb09FaFlhSGlJbUtrcE9VbFphWG1KbWFvcU9rcGFhbnFLbXFzck8wdGJhM3VMbTZ3c1BFeGNiSHlNbkswdFBVMWRiWDJObmE0dVBrNWVibjZPbnE4dlAwOWZiMytQbjYvOW9BREFNQkFBSVJBeEVBUHdEMytpaWlnQW9vb29BS0tLS0FDaWlpZ0Fvb29vQUtLS0tBQ2lpaWdBb29vb0FLS0tLQURvS2htdW9MZUNXZWVWSW9JbEx5U3lIYWlLQmtzU2VBQUIxcmovaU44UUxmd0xvOGNnakZ4cUY1dVcwaEtrb1NvRzVtSS9oRzVlT3B5QjZrZU1XZWgrTi9qUHFhWDJvUytUcGtaSml1SllXU0NOR2ZETENvKyszRGNrL3dBTXcrVTBBZXkyM3hmOENYVndrRWV1cUhkd2dNbHRNaTVQY3N5QUFlNUlBNzEzQU9hOEs4Wi9CN3czNGI4RlgrcFcxM2VpNXRjTWozTWdLdnVaQjViQlU2ZGNjRGwvbU9QdTlaOERwTHh2aDc1ZDE1bmxSWGtxV3hkTm9NZUZZNE9QbUc5cE9jbm5JenhnQUhwTkZGRkFCUlJSUUFVVVVVQUZGRkZBQlJSUlFBVVVVVUFGRkZGQUJSUlJRQVVVVVVBRkZGRkFCUlJSUUFVVVVVQUZGRkZBQlJSUlFBVVVVVUFGRkZGQUJSUlJRQVVVVVVBRkZGRkFCUlJSUUFVVVVVQUZGRkZBQlJSUlFBVVVVVUFGRkZGQUJSUlJRQVVVVVVBRkZGRkFCUlJSUUFVVVVVQUZGRkZBQlJSUlFBVVVVVUFGRkZGQUJXUDRrOFI2WjRZMFdYVXRVdVBKaFg1VVZlWkpIT2NJZzdzY0hqMkpPQUNScmtnZFNCM3I1aThjNnZxL3hPK0l6Nk5vaG5uMDZHUllJQkh2ZUViV0t0Y3NFTEx0M09mM21QdWJlTTlRQ0xROUUxYjQxK1BiN1U3NjRrZzA2SmxNNUxCekJDeFBsd1JqR004SG5HUHZNY2s0UDAvYjI4VnJieHdRUnBIREdvU09ORkNxaWdZQUFIQUFBNlZuK0hkQnNQRE9nMm1qNmFqcmEycWJVOHh0ekhKTEVrK3BKSjQ0NTRBSEZhbEFIbmZ4Ymx1YnJSTERRclFTTlBxVjJxN0ZDNGtWU01LUzNUNXloei9zbmtWMldnYVZEb2VnV09sd2JObHJDc1pLSnNETUJ5MjNuQkp5VHllU2VUMXE4OXZCSk5GTThNYlN4Wjh0MlVGa3lNSEI3WnFRREF3T2xBQlJSUlFBVVVVVUFGRkZGQUJSUlJRQVVVVVVBRkZGRkFCUlJSUUFVVVVVQUZGRkZBQlJSUlFBVVVVVUFGRkZGQUJSUlJRQVVVVVVBRkZGRkFCUlJSUUFVVVVVQUZGRkZBQlJSUlFBVVVVVUFGRkZGQUJSUlJRQVVVVVVBRkZGRkFCUlJSUUFVVVVVQUZGRkZBQlJSUlFBVVVVVUFGRkZGQUJSUlJRQVVVVVVBRkZGRkFCUlJWSFY5U2gwalJyM1VwdzdRMmNFbHhJc2VOeFZGTEVESkF6eDNJb0E4citPL2paOUswdVB3dFpFTGRhbEZ2dUpBV0RSdzdzQURBd2Q1VmxQUFFFRWZOa2F2d2Q4Qy84STE0YUYvcU5uNU9zMytXazN4NGtpaHo4c2ZKT004T2VGT1NBd3l0ZWMrR05QdS9peDhXYnJXcjkydU5Gc1poTVk3Z3J4Q1N6UVFCTUVFSGI4Mk9DQStUa2duNlRvQUJSUlJRQVVVVVVBRkZGRkFCUlJSUUFVVVVVQUZGRkZBQlJSUlFBVWhPS1U5SzhtK0xIeExrOE93eTZEcFJ6cXNzWDc2WFBFRWJxdzRaWERKS1BsWVpIUWc5NkFQVnc0SndNZE05YWRYekw4RHRRMUMxK0lTV2RzcnRhWGNFZ3VsRzRoVlVGbGM4NEJEYlZERWZ4a2RXcjZhb0FLS0tLQUNpaWlnQW9vb29BS0tLS0FDaWlpZ0Fvb29vQUtLS0tBQ2lpaWdBb29vb0FLS0tLQUNpaWlnQW9vb29BS0tLS0FDaWszRDE5cXFhaHErbTZUYkM1MUxVTFd6Z1p3Z2x1WmxqVXRnbkdXSUdjQW44S0FMRTg4VnJieVhFOHFSUXhLWGVTUmdxb29HU1NUMEFIZXZQYno0MitFYkxXbjA1M3U1RlNYeTJ1NFl3MEh1UWM1SUhxQWM0NHlNR3ZQOEE0cWZGZTExcTFoMG53NWZ5U1dMQXZjM0VmbVJNL0RLWWlyQmNwZzVPY2c1SFRhYzhEWndQNHgxSFJ2RG1pYVZCYjNPWkJMY1NTNWFlUTRMdXpZRzFGVk1oUUNSZzQzTWFBUHIrM3VJYnFDT2Uza1NXR1JROGNpTUdWMUl5R0JIQkJIZXBhcDZYcDhlazZYWjZkQThqUVdrQ1FSdElRV0lWUW9KSUE1d093RlhLQUNpaWlnQW9vb29BS0tLS0FDaWlpZ0Fvb29vQUtLS0tBQ2lpaWdBb29vb0FLS0tLQUNpaWlnQXJ3ejQvK0xiZGJHMThNV3M1YTZNbjJpOFdLVWpZaXI4aU9BTUhjU0d3VHhzVTQ1QnIydSt2cmZUYkc0dmJ1UXgyMXZFMDBzbTBrS2lnbGp4endBYStiL0J1bm40dC9GcTkxN1U3VVFXVUpTNmxoUlBNamZac1dLRml3d2NxdVR4ODIxc0FaNEFQWC9oUDRVbDhLZUJMVzJ1ZzZYbDB4dTU0MjQ4dG5VQUxnZ0VFS0Z5RC9GdTU2VjNOSUJqclMwQUZGRkZBQlJSU0ZnQ00wQUxSUlJRQVVVVVVBRkZGRkFCUlJSUUFVVVVoSUZBR0Q0eDhWV3ZnL3dBT1hHcjNTZWFJOEpGQUhDdE5JeHdxalA0azljQUU0T0s4QTBHdzhydy9ySHhJMTJiL0FFa3l1Tk15dmx2TGZGd3l6QVpWV1ZXejh1R0hFbkh5NE92NC93Qld2L2lIOFRiZndaWXp4clkyMTRZMWFOV0IzQkI1ck9HWUs1ajJTNHhqaklHY2cwdnhjdW9OT3R0RStIT2lXaVRXOW9zVW1Jc1BNMHAzS3FsVkgzanUzbmpMRjFQR2VRRGYrQW5obnlOTnVmRTg2anpMek1GcmpvSWxQemtZUDhUcUJ5QVI1ZWVqVjdQV1I0WTBHTHd6NGNzZEhnY1NKYXhoVElGMitZeDVac1pPTXNXT004WnJYb0FLS0tLQUNpaWlnQW9wQ1FDQWUvU3ZOby9qUG9OMTRyc2RIMDIzdWIyRzZuV0UzYXJzVldjZ0x0VS9NdzNIRFoyNEFKRzZnRDBxaWtWZzJjZHFXZ0Fvb29vQUtLS0tBQ2lpaWdBb29vb0FLS0tLQUNpaWlnQW9vb29BS0tLQ2NEcFFBSG9hOC84QUhYeFowZndWUDloOGlUVU5TMkJqYnhPRldMSkdCSXg1VWtFa0FBbmpuQUlOY1o4ZFBIS0NNZUZOT2FaYmxaRWx2SkFTaWdiZHl4LzdXZHl0bm9NREdUbmJMOE92Z3ZOYVhVT3QrTEZqa3VGTW8vc3lVTE1wemtCcEd5eXR3V09Cbm5hZDNHS0FNZytKdmlqOFJybkdpd1hHbDZWY2pDVFFMNU1hSXN2M3ZQUHpNdzRCMkVaQ25DOVJYT2VNL2h6cmVnVzAycStLUEVkcGNYYzRDUVJyUExQUGN1Q29PUzRYNVZUSnllbTFSL0VLK29vb0lyVzBqZ2dpU0tHSkFpUnhyaFZVREFBQTZBRGdDdm4zeDllVGZFUDRxMm5oYXhiYmJXa3JXdS9nWWJPWjN3ZHBPMExqYm5COHZJKzhLQUxQd28rRkdrYTVvamEzNGhna3VFdU1wYXdpVW91Rk9Ha3lqYnM3Z3lnY0Rnbm5JSTl2MGpROU0wR3dTeTBteGhzN2RjZkpFdU54Q2hjc2VyTmhSbGprbkF5YXQyOXZGYXdSd1FScEZCRWdTT05CaFVVREFBSFlBQ3BhQUNpaWlnQW9vb29BS0tLS0FDaWlpZ0Fvb29vQUtLS0tBQ2lpaWdBb29vb0FLS0tLQUNpaWlnQW9vcEQwT2FBUEl2ajU0cHQ3RHd4RjRkUmxhNjFGbGtrN21LR05nMlRnNUJMS0FDUVFkcjl4V3o4Ry9Cdi9BQWl2ZytPNXU3U2UyMWZVZjN0M0hNM0tLR2J5MTI5RitVNUlQelpZNTZZSGwrdUxEOFJQMmhGMHE2bFpkUGduTnFFZEFwTWNDbHBFQlVnNFoxZkRaeUF3UGJGZlN0QUJSUlJRQVVVVmsrSS9FZW0rRnRIbDFQVkpTa0tmS3FxTXZJMk9FVWQyT1A2bkFCSUFKdGIxaTAwSFJielZieVFMYjJrVFNQeU10aitFWklCWW5BQXp5U0JYaFd1ZkdEeEw0cDhUV2VtZUNZWnJhTi9rVkhoamtsbVlqTE0yUXlxb0dlaDZCaVQyWGl2Ry9qZldQSEY3TmZTTGRXK2xJOGFKWmh6SkZBMjFzYmlBQnVQNzBna2JzQWdaQXIwdjREK0NVUzAvNFM2OVVtVnpKRFl4c2lrS3ZBYVVISklKSVpCMHdBM1VNTUFIdDlGRkZBQlJSUlFBVVVVVUFGRkZGQUJYQ2ZGbnhjUENuZ3VmeUp0bW8zMmJlMjJ2aDB5UG5rR0NHK1VkQ000Wmt5T2E3dXZuRHhWUEw4VHZpN2JhUHBrN1hta1d6SkY1bG8zeXBCbFROS0MyVnpra2JnTU50akEzWjVBT3krQ25oaVBRUENsejRsMUpVZ252a0xMSk1ObmsyeTg1TE1BVkRFRmp5VktoRFhHZkNuVHB2SG54SXZ2RW1zR1NjV2ppOE95VGFxVGwvd0J5b3lTMndCV3dBZUFnVW5Cd2R6NDIrSXJIU2ZEdGo0SDBreGdCWTF1WWxiZVlZWXdwaWpPUVRrbmEzWElDRFBEWnIwajRjZUYvK0VTOEcydW55Z2k5a0p1THpKeVJLd0dSMUkrVUJWeURnN2M5NkFPc0hRVVVVVUFGRkZGQUJWVFU5VHNkRzA2ZlVOUnVZN2EwZ1hmSks1NFVmMUpQQUE1SjRGV21PMFpyNXY4QUZ2aXk4K0szanl5OE42RGQzVU9qeU1JZHBPMVpnRHVlWmtKWGNBRkJWVzUrVVl3V0lvQW4xZnh0NG8rSzJyeStHZERzMXQ5TW1iT3hsRzR4cXlrU1RQZzdjTW9PRnh5MjNMbkdmVXZDUHd3MEh3emJXclMyc045cVVNbm1mYm5qWldKQmJiaFN4QXdHNkRxUXA2Z0VhM2hEd2JwWGc3U2haNmZBZ21kVSsxWEFEQnAzQ2diamtrZ2NFN1FjREp4MU9laW9BUUFBWUZMUlJRQVVVVVVBRkZGRkFCUlJSUUFVVVVVQUZGRkZBQlJSUlFBVVVVVUFGYzc0MzhVdytFZkNWN3E3R05wa1haYlJ1UmlTVnZ1akdRU1A0aUJ6dFZpT2xkRlh6WjhhUEV4MXZ4bkZvRVdwZVhwMWhzam5HN01RbkpKZVFoQXhPMVNGT1JsU0h3UFVBOCs4TTZSSnIzaUd3MDJOcGQxMU9zVzVFTGxGSitadG83QVpKOWhYMm1veG12bkQ0S2FMTnFYang5WWlWTGEwMDhQSThTWktocFZaRmpHNWl3R0N4Qk9UOG1DZWNuNlFvQTVmeC80b2o4SitFcnkrTXJwY3lxWUxQWWdZK2V5bmFjSGpBeHVPZU1BOWVCWG5md1A4T3RkU2FsNHIxSzFFdHhQSjVkcmN6YjJjazVNempjTUhjU0ZMQWtrcTQ0NXpVK05HcHgrSXZGV2plRDdHNGxXNVNjSmNCeVZoRWsyd1I1OVNGSk9RT0EzQis4QjdQb2VrMnVoYUxhYVZaSUZndFl4R3ZBQk9PckhBQUxIcVRqa2ttZ0RRb29vb0FLS0tLQUNpaWlnQW9vb29BS0tLS0FDaWlpZ0Fvb29vQUtLS0tBQ2lpaWdBb29vb0FLS0tLQUN1WStJbXNmMkg4UGRjdmxrbmprVzFhS09TQTRkSkpNUm93T1JqRE1EblBHT0s2ZXZCUDJpOWJYZm91aHJQa2Z2THllRFoySHlSdHVJLzY3REFQMUgzYUFJdjJlL0NzTXIzM2ltWlVjeE9iTzBYQWJZY0JuZmtjSERLQVFRY0Z3UnlLK2dLd1BCR2ludzk0STBiU25nTUUwRnFubnhsOTIyVmh1azVCSSsrVzZISHB4Vy9RQVVVVkZjWEVWcmJ5VHp1c2NNYWxuZDJDcWlnWkpKUFFEMW9BWmUzdHJwOW5KZFhsMURhMjZZM1RUdUVSY25BeVNRT3BBcjVxMXJYTC80d2VOb3JTR2FUVDlGaFV1Uk83R0szaWozRnA1UUcyaDhFak9RT1ZYZC9FYkhqVHhMcS93QVdQRXNPaCtIOU5sa3RiVnBaSVZqa0lFNEJ3SjMzYkFueWdBQnVSdkl5U3dGZFQ0OHVkSStHSHcxWHdubzhzWTFQVlZ4TnRZN21VcUZsbUtuZHREQmRvQUkrOGR2M1RRQjU1WjJVZnhHK0lWcm8yajJUNmJvU1NBcmJSNEJoZ1ZWRWtqRUtmM3JoUjh6WkpPeFN4QVUxOVRXRmpiNlpwOXRZMmtmbDIxdEVzTVNiaTIxRkFDako1T0FCeWE4NCtCL2hrYU40TFRWSFNSYnJWbjgyVHpGS2tSS1dFZlU4ZzhzRzR5SkIxd0RYcUZBQlJSUlFBVVVVVUFGRkZGQUJSUlFUZ1pvQTVMNGwrSkxqd3I0RTFEVTdLNGhodmdFaXRqTGc1ZG1BTzBIN3pCZHpBYy9kNUJBTmVZZkN6K3p2QS93NjFUeHBxcXFzOXl4aHM5N0tES0Y0RWFiUVdVdElIRGUwWWJBQzVxbDhadFFtOFllUE5NOE5hSVB0czFtclJtTzNCeUozUHpxeloyNFZVWDB4bHNucnRxK0pSL3duWGpPdzhGZUVQbDhQYWFWalg3Tjg4S2MvdkxnNXh1STNFWkxIY2VRY3lISUJkK0V1ajNmalh4OWZlTWRhaTN4MnNwZEF3SlF6c01xcTdnZmxqWGtESUs0aUk0cjZGQUE2Q3Nmd3Y0ZXQvREhodXcwZTJZTkhheGJTMk1iM1BMdHlUakxFbkdlTTQ2WXJab0FLS0tLQUNrTEtCa2tENm1na2djRE5lUWZHVDRseTZCQ3VnNkhjeHJxZHdwKzB5eGttUzFqd0NBT3dkZ2VEbklHRGdibElBT1grS3Z4Tms4UTNLK0dQREV0eEpBSmZMbXViVm1KdTJiY25sSUZQenB6anZ2UFRBQUxlcGZEZndERDRFMFZveko1K28zZTFyeVVINWNybmFpZFBsWGMzT01ra25nWVVZdndoK0hNZmhYVFJyRjg3dnE5OUFOeUhLL1o0MnczbGtFQTd1RkpKSEJHQmpCTGVuZ1lBRkFDMFVVVUFGRkZGQUJSUlJRQVVVVVVBRkZGRkFCUlJSUUFVVVVVQUZGRkZBQlJSUlFCUjFmVW90STBpOTFHY09ZclNCNTNDQUZpcUtXT0FTQm5BOVJYeDlaemFnbW42bHJSZEpIdTJOb1o1bUxUTTBuN3lSbzI3bmFOam5QM1pnQ0NIcjZMK05sN2Iydnd4MUdHZVRhOTFKRkRDdTNPOXc0a3g3ZkxHNXlmVDgvbmJ3YjRjbjhUK0piTFNvWVpaSUhsVnJsb2lGTVVHUUhiSkdCd2U0NmtER1RpZ0Q2UytFV2tuU2ZoenBwZUF4VFhtNjdrRzdkdURuNUc2a0RNWVRqOCtjMTErcTZuWmFOcGsrbzZqZEpiV2tDN3BKWE9Bb3pqOFNTUUFCeVNRQm1yU2tiVDF4azlhOG4rUEhpQ0swOEsyK2l4WGlMZFhzNlBMYnFBek5BdVRrOGNEekFtRHhuQkE3MEFjajhLTE9meHQ4VGIvQU1TNnNubmZaQ2Jsc3R1UkoyT0kxMnZrNFZkeFhISytXdlBhdmVOWjFCZEkwcTR2MlRlc0s1MkJ0dVNUNjloenlmeHJtZmhYNGRidzM0RHNiZWUzOG04dWQxMWNCdHdiZS9RTUdBSVlJRVVqQTVYdjFycE5lK3lEUU5TZStoYWEwVzFrTTBhOEZrQ2trQTlqanB6UUJtK0NQRWorS05BRjlMR3NjNlN0REtxS1FwSXdRVnlTY2JXWHIzelhTVjUvOEh6Y253VVRQNW5sbTZrOGpmbkd6QzUyNTdidC9Udm52bXZRS0FDaWlpZ0Fvb29vQUtLS0tBQ2lpaWdBb29vb0FLS0tLQUNpaWlnQW9vb29BS0tLS0FDaWlpZ0FKeFh5L2Mzc0h4SCtQMXExazV1dE9lNmk4dEwxVHNNRUtocEZDbk9GYlk1Q2tEbC9tQUpOZStlUGZFTVhoandYcWVvdmVKYVhBdDVFdEhZQWt6bFQ1WUM4N2puMk9BQ1R3RFhrL3dDemhvd0oxdlhXZ3lQa3RJSml3NC9qa1hhRC93QmNUa2oySGVnRDN0UmdVdEZSM0U4VnJieVR6eUpIREdwZDVIWUtxcUJra2s4QUFVQUpjWE1GckJKUGNTcEZERWhra2trYmFxS09TU1R3QUIzTmZQZnhGOGUzUGovVW9mQ2ZoVkpMMnlsZU5zcEc4Y2x4S054STVJSGxnYlNkeWdBcVd6Z0FsL3hIOGNUL0FCQTFhMThLZUdJN21XRVhEeHpCR1FpOFpXd3BVZ2tlV05wWU1XQUkrWWdiUWE5VThDL0QzU3ZCVm4rNlZMblU1RktUMzVRcTBpN2lRTnBadHZCVUhCK2JhQ2FBSnZBbmd1eThGK0hvclNHSlB0MHFxOTdPRHZNc29IWTdSOG9KSVVZSEhKR1N4UGdzYVgveGgrS3N6bzBxV0pjTzZNMnd3V2FNQnhrc0E1QjZBRWIySjRHU1BWZmpkNHYvQU9FZDhLalM0bFlYT3NMSkNzdVJ0U01iZk15Q0Rra01GSCs4VGtFREx2Z2Y0Vmw4UCtEcEwrN2lqVzUxVjFuUmtrTEUyKzM5MEQyQitaMjQvdkRQUEFBUFRnT2hPTSt0TFJXZHFtdmFUb2hpL3RUVTdPeTg3UGwvYVoxajM0NjQzRVp4a1orb29BMGFLS0tBQ2lpcTE5ZjJ1bTJrbDNlM0VOdGJSNDN6VFNCRVhKQUdTZUJ5UVB4RkFGZ2tEclMxODlhcjhadkZmaWpXcmZTL0IybmZaSGxtMnc1VkpaNWNGdXU3S0l1M0JJd2R1MG5kaXZvVUhJQkhTZ0FySDhVYS9iK0dmRFYvckZ3QXlXc1pZSVNSNWprNFZNZ0hHNWlGempqTmJGZUkvdERhekdtazZSb2lsRFBMT2J0OFNqTWFvcFZkeVl5UXhkc0hwbU05YUFQRDVOWHVwdFF2NytRNzd1ODNsN25KallOSVQ1allVZ2ZNQ3lrRUZkcnR4MEkrbS9oVjhQaDRPMFUzR29SMjc2MWRMaVowRzR4SnhpSU5uQndSa2tjRTRISVVHdU0rQjN3L2xoWmZGdXIycnhQcy93Q0pZalBnbEdCRFNNdU9oQnd1VHlDVGo3cHIzVURIYy9pYUFGb29vb0FLS0todWJpTzB0NWJpZVJJb0lrTHlTU050VkZBeVNTZWdBR1NhQU9TK0l2eEJzUEFtakxKS3J5NmhkTEl0bEVxYmxMcXZWeVNBRURGQWNIUHpjRHJqeTc0Uy9EMmJ4TmV5ZU52RXJRM2NGeExNOFVFa1NPdHpJeFpaSGRjWTJoaTJCZ0VubmdENXNLNHVOUytObnhPanQ0amNRNlBDUTZ3dktGTnZhcXloM0hCSG1NY2RtNVpSa3F1UjlMMkZqYjZmcHR0WTJzWml0cmFKWVlvOXhiYWlqQ2pKeVRnQWRhQUxXQjZVbTRBNHFPNG5qdG9Ibm1ramloalV2SkpJd1ZVVURKSko2QWV0ZUErTC9pTnFmeEExbUh3cjRUTnhiMk4zS2JaNXh1emRJMjNMRUJkMGFMdGNubmxTZHdIU2dEdlBHdnhlMGJ3MmJxdzA4blVOWGlMUmxFVStUREp4L3JHNHpqSitWY25LbFR0UE5jVkd2eGE4ZHlXZW9MTytsYWZjS1hnYUs0K3lSS01EcXFreXNHMjVCT2Z2WkdGUEhXZUJmZzVwdmh5NWcxVFZMZzZqcWtXSFZkb0VNTDRISUI1WmxPY01jREJCMmdnR3ZRZFUxWFR0RnMydTlTdW9yYTNYSTN5dGpKd1RoUjFMY0hBR1Nld29BOHMrSDNpSFhkRThiWDNnenhMYzNkOWNPZDBNejNCbEVUS204L01mbUtzdUNQUTQrVUV0ajJLdkdmaGJadzYzNDQ4UWVLNDRtUzJlU1EyM21SOTVXTFpEQTREQlJ5Qi9mNjg4K3pVQUZGRkZBQlJSUlFBVVVWRmNYRVZyQkpQUElrVU1hbDNra1lLcUtPU1NUd0FCUUJMU2JoNjE1SjRrK09WbmE2aStsK0d0TmJXTHJjMEN6YmlJbWw0QytXRkJhVWJpUnh0emdiU2R3TmNuQjhXL0hlbFhrZXRhM283eWFOZEJWaXR6YXRCQXhaY3FZNVNwT1RndHlXQkdjQWNFQUgwUlJWVFM5UWkxYlNyUFVZRWRJYnVCSjQxa0dHQ3VvWVp4M3dhdDBBRkZGRkFCUlJSUUI4L2Z0RTZoRkpyR2lhY3FQNXNGdkxPN25oY1NNb0FCejEvZEhJNDZqMTR0ZnMrZUhpUDdUOFJtVEs0K3dSSUd6bmxaSEo0LzNBQ0R6ODNIUTF3dnhrSC9BQmRqVytuL0FDdzdmOU1JNittUEN1Z3crR1BET242TmJuY2xwRUVNbkk4eGp5ellKT056RW5HZU00b0EyRGtJY0Ruc0JYemg0dU1QeEsrTjl0b2thUGJSMnpOWVN1ekFNNnhOSThqTHdjRWpkdHpub0NldUI3YjQ3MTUvRGZnblY5VWpaa21odHlzRG9vWXJLNTJSbkRjWURzcE9ld1BYcFhsZjdQWGgwTU5UOFJ5eWNqL1FJNGxKQS9oa2NzTWMvd0RMUEdEL0FIc2pwUUI3dGdmalhKZkU2V1NINGQ2dTBVam94UkZKVTRPR2tVRWZRZ2tIMkpycmdNQUQwcmovQUlwZjhrNDFiNlJmK2pVb0FUNFduUHc2MHJqSCt1LzlIUFhZMXgzd3MvNUp6cFgxbS84QVJ6MTJOQUJSUlJRQVVVVVVBRkZGRkFCUlJSUUFVVVVVQUZGRkZBQlJSUlFBVVVVVUFGRkZGQUJRZUJtaWc5RFFCNEorMFg0anovWlhocUpRcEgvRXdsZGdQOXVOQXB6L0FOZE04ZjNjSHFLOWI4RmVIUDhBaEZQQjJsNkswdm1TMjBYNzV3MlFaR0pkOXB3UGwzTWNjWnhqUE5mUG5pNjVYeHo4ZTRkUGxnbnViS0cvaTA4d0NQNWhERy83N2xEbmJ1ODF0MmNoVG5qR0I5UWxzSVRrWkhXZ0JTY0hGZUNmRkw0aTNtczZ2SjRJOE5NNm1TYzJsektTRWE0bExiUEpYZGpDYnNoaWV2VDd1ZDI1OFZQaVZjMlVpK0YvRFQrZHFkMW1PVzV0bkR2QVN4VHlrQ2tuemNnK2hYNWNBc1JqWCtGbnd6LzRReUNUVXRRa0w2dmRSZVc4YVA4QXU3ZU1rSFlNY00zeWpMZE9BQnhrc0FYL0FJYi9BQS90UEIra0pjU1JidFp1bzFOMU0rQ1kraDhwY1pBVWR5RDh4R2VnQUhjTjBIUFBibnJUZ01kSzRMNHQrTUY4S2VDWi9zOHdUVWIvQURiMjIxOE9tUjgwZ3dRdzJqb1JuRE1uclFCNDU0aHViLzRxL0Y0YVBCZkxGWkpQSmIyY2hmeklralFFdklnR0EyOElXR2V1Vkc3QUJIMDFiUVJXZHZGYlFSSkZERWdTT09OUXFxbzRBQUdBQVBRVjRsOEdMTFRQQ1hoQzc4WmEzcUZuYnc2aG1LQnBNYmtXTm4zS0QxTE1VSjJLQ1NFVTg5cTNpWDQ1NmhxcjIxajRQc0o0Slp3Rk10eENyeitZV0FDeHFDeW5QVG5KTzdnREhJQjJmeEYrS2RwNE9tR25XTUtYMnJzaFlvemtKYlpIeW1USFVrNE96Z2tjNVg1YytHYUJEZmZFbjRoMkZscnVxWE1qM1RTYjVpMjVrVlZhUXFnUENqZ2dBRGFwUFE5RDFGejhOMThEK0M3dnhKNGxhR1hVa0tMWTZla3FtSlpYQUE4emNwRWpJVHZLQUZTSXprc0dPT1E4QWVJdGI4TmVJRGM2RFlwZTM5ekEwSGtHM2tsTExrT2Rxb1Fjalo3OFpOQUgySFVVMXpEYlcwbHpjU0pEQkVoa2tsa1lLcUtCa2trOEFBY2sxODdSNjM4YTlYYzJDd2F1bjJnRmR6NmZIYkJSZ2svdkdSZHB3T0RrSE9NYzRxeC93b2Z4WHFtcmZhZGI4UVdVZ20vMTl6dmx1SnVGd3Yzd3U3c09XR0IrVkFIYWVLdmpoNGQwZlpEbzRHdFhJbFpKUkd6UnhvRkI1RGxTSHlRTWJjZ2pKeU9NK0srTS9HWGlueGhiV3Mrc0I0ZE9rSmt0SW9yZG83ZG1YQ015ay9mSTVHU1R0TEVER2NWN3ZwSHdYOEY2U3NiUzJNK29UTElKVmx2Sm1icGc3U3E3Vkl5TTRZSEpKem12Si9GTTl4OFV2akF1aldlb2h0UFdWb0xWbXdZNDFSY3l1b1VrTVdLTVFlNDJna0RvQWVpL0Jqd0ZGb21neCtJTGdQOEEyanFVQUtvWEcyR0FrTXVOcElPN0NzYzlPQmdZT2ZWODdWeWUxUjI4TVZyYngyOEVTUlF4SUVTTkZDcWlnWUFBSEFBQTZDdWY4YWVNTEx3Ym9NOS9kdkcwMjBtM3RmTVZYbmJLakNnbk9BV0JKQU9CazQ3RUFoOGUrT2JId05vZjIrNFZKN3AzQ1cxbVgyTk9jamNRY0hBVUhKT01kQjFJcjV3OEdXMnBlTy9pYlpTM3hOOU5KZHJkWHIzQ2wxTVNFRmd3d1FGSUd3REFIekFjQ202cFA0aThkd2FwNHcxaUVTV2VuUmVUNWtTaUJVWjMvZHhvZHAzYlhsREhPVHQ0TEFrRStpZnM2YU1DZFoxeVMzL3VXa0UvbVovMnBWMjUvd0N1SnlSOU85QUh1VnZGRGEyOFZ2YnhKRkJFb2pqampVQlVVREFVQWRBQU1ZcXRiNjVwTjVmVFdOcnFkbFBkdzd2TmdpdUVhU1BhY051VUhJd2VEbm9hNUw0cCtPQjRMOE5mNkhKczFXOURKWi91dDZyZ3J2YzhnRGFEeG5QSlhnZ0d1Qy9aNTBSMnVOVzhRU0s0UlVXeGhZTU5ybkllVEk2Z2pFZU8zSjY5Z0QzbWlrQUFBQTZDbG9BQ2NETmVML3RBK0s0YlRRYmZ3eEJMS0wyOWVPZWRBZzIrUXJOZ0ZqMEpkUVJ0NStRNTRPRDY1cTJwUTZSbzE5cWR3cnREWjI4bHhJc2VDeFZGTEVESkF6Z2V0Zk5YaGF3dS9qRDhVYmpVTlk4K1RTNGlaWjQyYzRpaUJQbDI2a0xqa24vWkxBU05uZHpRQjY5OEgvQlNlRXZDTVU5eEc2YXRxU0pOZGhpUnNBenNUYVFNRlEzUEdkeGJrakZlaEZnQmtuQTk2TUJlZUIycnp6NHcrTVArRVg4SXRiMnR6TkRxbW8vdTdSNFY1VlZLK1lkMzhQeW5HUnpsZ1IwSkFCd3Z4SytKYy9pWFVCNFE4SlRDV0c1bUZ0TmRSc1A5SlppRjhwRGtEWVNjRnY0dVJ3dVMzb1h3L3dEaG5wM2d5eGpubWpndTlaUHp5WGJSNThvNEkyUlo1VmNNUm5ndGs1d01LT2ErQ1BnUzMwL1NJL0Urb1dvL3RHNzNHMERnL3VZU051NERHQXpZUEl6bFN1RHljOWg0eCtJK2hlRHJlZGJpNlNmVUkxekhZd3R1a1pzQWdQZ0h5d1F3T1c3WkkzZEtBT2wxUFU3TFNOT24xRFVKMXQ3UzNVdkpLK2NLQitwSjZBRGtrZ0RrMThvK0pQRStvK05kZmx2THNzcUZpYmUyOHhqSGJyZ0E0QjZaQ2dzUUJrODRIQURmRm54RThRZU1FTnZxVnhFTE5aVm5TMmdnQ0pHNnFWQkRITEhxeDVZOWZZWTlUK0dQdzd0Tk8wNVBFbXZlVWthb3R4YmxwV2pFZXhpeGxmT09NS3BIT01ISjdVQWR2NFMwNnkrSHZnQ01hcGNwYmlKVGMzc3JkRmRzZkx3VGtqNVVHUHZFREF5Y1Z3L2liNDVTcnFNT24rRWRQWFVIZGxWWjVvcFAzckhqWWtRMnNUa2prNDVCQUI2MXp1cjZsclh4aThicnBPbkdTSFFMV1loSlVqZG8wWEJJbWs0SHpzRk8wTmpydDRKWW4yYndsNEgwVHdoYUdMVDdYZk8yNFNYYzREVFNBa0hhV0FHRjRIeWpBNDduSm9BOG91WVBqVnJTelQ3TG0yaHUxUmhGQmNRUWVXb1lzcWo1ZzZINWdEMFlnQU5uR0tQQW54UTFuU2RmaThJK0pJNTcyWnIvQU95ZmFKSmcwc0VoWXJ0WS93RExSZCtBRG5qSnh1K1VWNzV0WDBIclhnUHg3OEpXOXROYStLYmNsSkxtUVd0MkN4TzU5bjd0MUdNZmRqWlNNaitIamtrZ0h2eW5JelMxaCtFdkVVWGl2d3hZNjFGYnZiTGNxeE1Ua0VveXNWWVo3amNwd2UvSFRwVzVRQWg2ZHZ4cjUvOEFpMzRrdWZGdmlXejhJK0czdXJobzJraHVZb21kRmxtRGo1R1JzQWhQTDNiamtBRW5JeG12WnZGdXZRZUcvREYvcVVrMXJITEZESWJkTG1RS3Nzb1FzcWNrWkp4MEhKN1Y4dWVHUEhMZUhkVzFQeEpMWlJYL0FJaHVYekE4NktJWXk3RnBwQ0JnN3o5MWRwQXd6WjdBZ0h2WGhQNFdlRy9CZG45dnZ6RGZYMXZ1bGJVTHBRcVJLQ0dES2hKVk5vUUhlZVFkeHlBY0R5THhkcjJyL0Z6eGhGcG1oYWVseGJXRFRHek1RSU1rUjJobmtkeUFvT3dFWkM0M0JlVGpQQTNtcDNPdDYxSmY2dmV6eVQzRW02NHVBb1p3T2h3dVZIQTRDNUF3QU9BSyt0ZkJQZ3Z3OTRUMDFtMEV2TWw0cU85MjgvbUdkUnVLSGo1Y1ljZ0ZRTWpHYzBBYnVrYVpEbzJrMldtMjdPME5uYnBibzBuTE1xS0FDVDY4VmRvb29BS0tLS0FDb2JxZUcydHBKN2lhT0dDSlM4a3NqQlZSUU1ra25nQWVwcWF1QitNSGlKdkQzdzd2dHNSa2sxRC9BRUJDVnlGOHhXM0U4Zy9jRFk2OGtjRVpvQThZOEphVmErT3ZqWGR5cW4yblNqZjNHb1NmS0FHaUVoS0ZsZnFwWXFwWEdjTWVuVWZVdGVGZnM1UXpMRDRpdVdobDhsM3QwV1ZoOHJNb2tMS0Q2amNEajBZZXRlNm1nRHhyOW9YVjVyYncvcG1rUjcwanZwMmxtY1NGUVVqQStVanVDWkZQUFFvTzVHTzcrSE9neGVIdkFXa1dpVzhrRThsdWx4Y3JLbTJUem5BWjkzQU9RVHQ1NUFVRHRYaHQxZVcveEgrUEZsSlpTaTYwNTdtTFlsNGhLTkRDb1oxQUlPRmJiSVFwQUh6YzRMR3ZwcEFRT2FBSFZ3SHhpdnZzbmdLU0RadUY1Y1JRWnpqWmdtVFB2L3E4ZHV1ZTJEMzllYWZHL2p3WlpmOEFZUmovQVBSY2xBSFMvRDZ3L3M3d0ZvMFBtYjkxdUpzNHhqekQ1bVB3M1k5OFpycHF4dkNQL0ltYUgvMkQ0UDhBMFd0Yk5BQ2Joam5qNjB0ZVJlTVBFVjU4Ti9HMGQrQTl4cG1zYlh1dk9Lc3dLTjh3ajVVamFoRzNQSFBmSEhyRnZORmMyMFU4RWlTeFNJSFI0MkRLeWtaQkJIVWU5QUV0RkZGQUJSUlJRQVVVVVVBRkZGRkFCUlJSUUFVVVVVQUZGRkZBQlJSUlFBVmorS1BFRnY0WDhOYWhyVnl1Nk8waUxCTWtiM09BaTVBT056RlJuSEdjbmdWc1Y0NyswSnJ6V1BoT3owWkM0YlVyamMveXFWTVVRQks1NUlPOW95TUQrRTg0NElCem43UC9BSWZuMUhYdFU4WTNyQ2ZabTNpa2x4STd6dmhwSDNFN2d3QkFKeHo1cDU0SXJyZml6OFRJTkRzTHJRTklublhYSk5xU3lSZ3A5bFJsVnM3aU9XWld3TnZJeVRrRURQR1cvaTIxK0hud25zTkEwNlZIMS9WcmMzazhzRHZpMldZWlZ5ZUNKUEsyQUt1TUVidlRmMEh3aStGb3MxaDhTK0liWi90dTRtMHNwNG1Rd0ZXSUVqcVFNdnhsZU1EaHVTUmdBcy9DUDRkUzI3eCtOTmNtZVhVYnRUTmFvWDNFTElPWlpHL2lkZ3g0N0E4OC9kOWlvd0IwRkZBR1I0bDhSV25oWFFibldMNk9WN1czMmJ4RHRMbmM0UVlCSUhWdld2bDM0bitPSXZIUGlpSzVzNHJ1UFQ3V0FReFJUa2ZlSkpkOW9PRkp5bzZuSVFFK2c5WC9BR2dkZnU5TzBEVDlKZ1pCYjZpMGhuQlVFdjVaaktxTTlCbHNudjhBS08yYXlmMmZmQ0RwOXE4VlhzUnhnMnRsdlhIL0FGMGNBcjlGREEvODlBYUFPZThQL0R6eHQ0NlRUSmRXdTU3WFJVdFFMV2E1WVBzUlZWRkNRaGg5NEtwejh1NVJ1eVNSbjNudzc0TDBMd3Rhd3hhVllRUnl4eEdJM0xScVpwQVRrN254azVJQngwNEdBQUFCMEdLYTV3UGIxb0E4Ry9hQjFHYTcxalEvRDFxTGw1dHJYRFJJQ3l5RjJDUjRWVHk0S3YxSEcvZy9NYXgvSC9oRzcrSGErR2ZFV2p5SmFYTWR2RGEzVXRvZmtGeWtlQzR6OTRPQTJSc3dkcDNaTDFTOE4zWitJbngzZzFieUo0N1kzWDJ3ZVVuTWNjS2Z1dCtOd0dTa1liM1lnRVpGZWtmSDJTQmZBTnR2REZ2N1JpRVJSOW9WdGtuM2hna2phRHdNYzRPZU1FQTlJMFRXYlB4Qm8xbnF0aSs2MnU0VmxUSkJLNTZxMkNRR0J5Q004RUVkcTBLNEw0TUJ2K0ZVNktTT29uSVB0NThtSzcyZ0RoL2k3cnE2RjhOOVRPWS9Pdmwrd3hMSXBJWXlBaGh4ME96ZVJuaklIMHJsZmdKNFkvczd3OU40am5rZ2xrMUllWEJpUE1rVVNPeXNDMyswd0J3UDdpbm5vdkkvSEx4RGM2MTR5dGZDdHJITTZXT3dtQlZZbWVlUlFSaFZKM1lWbEM4QnNzL3FLN0h4RjQ1cy9oVDRKMHZ3L1lwWXplSUliV09ONFlkclJSU0FSbDJsQVpXRzhNektjWllqSjcwQWR0NDQ4YjZYNEkwVTM5OGQ5dzVaTFcxVmdIbmZIUWRjS01nbHUzSEJKQVBnSGhYd3g0aStNdmlaOVUxdTltTmhEdGp1YjNhRjRISWlpVURhR09jOU1ESlk1SkFiUzhLL0R2eFA4VGIxdGI4Vlg5OUJaY0ZKN2hUNWx3ckhkaUpUZ0ltR1lnNDJnc0FBUmtENk5zN0cxMDZ6anRiRzBndG9JODdJb0l4R2k1Skp3QndPU1QrTkFIalB4dHQ5SjhLL0Q3VGZEK2t4SllyZDNnYzI4S2tDZU9OQ0daeVB2a0V4Y3NTU1FEempqcC9BUXMvQkh3YnROUzFIeWtqVzFmVUoyaTI3cFRKbGtHVHQzU0ZXUkFEM3d1Y0FWNVg0N21iNG1mR1NIUkxDRjdkb0gvczFuazJzVDVUeU5KSmpJR0FDNUFEWklYc1d4VnZ4L3dDSTcvNG9lTXJmdzE0ZnQzbHNMTzRhTVNJelNJN2xnaG5jcGtDTlNlRGc0R1RuNXRvQU9JOFc2N3Ezakc4dnZFRjZjMjBjcTJxQXNuN2xYTXJ4UmpBQmJBV1Q1c1pPT2NIZys4ZkFXd2xzL2h5SjVDaFcrdTVMaVBhVGtLQXNlR3ozekdlbWVDSzVuNHArRVl2Q3Z3WDAzUzdCSkowdGRTU1c2dVBLQUxNeVNneVBnY0RjeXFNOUJ0R1R4WGEvQlM0aG0rRldsUnh6SThrTHpwS3FzQ1VZek8yR0hZN1dVNFBZZzk2QVBRYVFuRlV0UjFuUzlKRVoxTFVyU3o4elBsL2FKMWozNHhuR1R6akkvT3VESGl2Vi9ITjdIYStHbzU3RFRzWXVMMjRoRzVTUHZLcEJLNXd5RVl3MmNjZ0FtZ0NoOGVmRU5uWWVDRG94dzk5cVVpYkV5UXlSbzZ1WDZIdUZVRGpPNDR6ZzFlK0NYaGg5QzhBdzNWeWtZdWRUZjdXVDVhaGhFUVBMVXNDY2pIempwamVSajE0SDQ4K0g0ZEYwcncwTEdCekdqWEtTM0xKeXpOc1pRN2dBWitWc0E5bFBvYTlaK0htdTZQZWVEdERzTFRWYkdlOGcwdTM4NjNpdVVlU0xiR2luY29KSXdjQTU3MEFkZ1Jtdm5ENHplRGZGRjc0N3VOVHR0UHZkUnNicUZGdHpiSTB3aENJb0tFQVpUNXR6ZWgzRWc1M0N2ZXJ2eE5vTmpkdGFYZXVhYmIzS1kzUXpYYUk0eU1qS2s1R1J6WEQ2bjhiUENscGtXYTNlb1NHTGVqUnhlWEh2T2NLUytDT2c1Q25nOStsQUhuVmxvWHhqMXhMR1ZYMURUclRZdHZHaTNDMkN3eHF4R1doUXF3QTUvaEp4akdSZ1ZXMVQ0ZmFMNGQxVCt4VTFHWFc5WmxkSVlZZklOdkZiczQrVXUyVHVKM0lRQXdBd1MyUjhwN0dPYng1OFRaWGoydG9taHVxc2ZrWkZrallzQmh2dlNrb2VRTUljRDd2RmVnZUdQQU9oK0ZkN1drTDNFN05rWEYwRmVSQmpHMVNBQUJna0hISnp6N0FIejc0MjhMNjU0UDFQU05ZMUcxaXViWmlzZ2hNSU50QzRrTG0zS3Fkb1UvZUlBVUhjMk00SnJwZmlWOFVUNHN0OVAwUHdzOXlJYnRWYTRNWWRaWGtjTW4yY29QdmNIa0RjR0pYQjQ1OXY4VGVIN1R4UDRmdXRGdlduUzF1UXZtRzNZSzR3NGNZSkJIVmZUdWE4OCtHL3dmazhJK0paOVcxYTVodkh0OHJwelFzeTRCM0t6dWhIREZTQUFHSUc1dXB3UUFkTjhNdkJTZURQQ2NWdkxodFJ1Y1RYYkZWeWo0LzFZSzlRdkk2bmtzUmpPQjJ0QUFBd0Jpa2J0UUF0YzM0NDBHMzhVZURkVDAxclNPN3VUQTcyaUZnQ2s0VnZMWU1mdW5QR2VtQ1FlQ1JYQS9FZjR6TG9jMTVvdmg0R1RWb0pmS2x1SFJYaGpHdzUySGRuekZZcU1NdUFRd0lPT2VMaCtGWHhGOFcyVUY1ck9vQ1BZTjBFT3JYa2p5SXJBRWtLQTIzUEdRY0hJNUZBRVh3dytLRWZnL1F0VnNkVU4xZHh4b3NtbTIwWStVUHVPNU4zVkFTUWVoSHl1UmtuRFdkYitPZmlmV3JxSzE4TzJVV21zenFGUkZGMU5LNXlBcTVYR0NTdUJ0em52emlzUHh4OE1MendGTmFYZy80bkduRTc1WkJBNktoVmxHeVRZZmxEYmdBUXdKK1lEQkF6NzU4TXRaMGpYZkIwTjdwTmphMlRGOXQ3RGEyd2hRWElWZDVBSFVIZ2c1SnhnSGtFQUE4bjA3NFcrT3ZIZHo5dThZYXJjMlVDcVpvRGN0NXpaa3dXVllndzhvWUhJTzNHRkczcmp6YVh3VjRtdDlhdDlIbTBTOGp2cm1ab29JekdRSldHTnhSajhyS001TEE3UU9jNHI3VHdNNXh6U2JWeUR0R1I3VUFlRC9FWDRTMm1pZkRTeW0wcGZQdnRISmE2bkVRVjdtTmo4N01GVWs3VGdqSndxaHNrOTluNGEvRlh3L0I0STAzVHRhMU40ZFF0RU1HMTdkanVqVS9JVktBZ2dMdFhubktucmtFK3QzTUVOMWJ5UVhFS1RReXFVa2prVU1yS1JnZ2c4RUVFZ2l1VG0rRm5nbTR1bnVXMENCSGNna1F2SkVvSTlFVmdvL0FkZWFBTmZTdkZtaTYzT0lkT3ZQdEVoWGRoSW53QjZrbFFCMUg1aXRxcTlwcDlsWVJlVloybHZiUjd0MnlHTUlNNHhuQUhYRldLQUNpaWlnQXI1My9hRzFhN2JYOUwwWHpDdG5GYWk3MmdrYjVIZDBKWVp3ZG9RWU9PTnpjODE5RVY1NTQ2K0UrbitPZFp0TlV1TlF1YlNlRlVoa1dOVlpYaFZtWWdaNVZ5Vys5a2dZKzZhQUUrQ2Vud1dud3VzSllsS1NYY3MwMDdaUHpPSkdqeU05UGxSUng2WjZtdW44WjZtK2plRGRZMUdLNFMybnQ3T1Y0SlhBd3N1dzdPdkdkMkJnOWM0NzFvNlJwME9qNk5ZNlpibHpCWjI4ZHZHWkNDeFZGQ2pKR09jRDByeXI5b1hWRmc4RzJHbHJjT2sxNWViMmpVc0JKSEdqRnQzWWdNMFJ3ZStEMnlBREUvWjAwNVhuMXpWcGJhUXVxdzIwRTVEQmNIY3pvT3hQRVpQVWpqMTU5OHJpUGhQb3gwWDRiYVBHNlFyUGNSbTdsZUpjYi9BRENYWGNjRExCQ2lrLzdPT2dGZFJxV3Q2Vm8vbC8ybHFkbFplYnU4djdUY0xGdnhqT054R2NaR2ZyUUJmcnpQNDQvOGlWWmNnZjhBRXhUci93QmM1YXl0WS9hQTBPS0M2WFJySzh1cnRReXdQTWdTQnpuRzRuZHUyNDV4dEJQQU8zcU9EMXo0eTZ0NGw4TVhPa2FocGxrcHVOdjc2QXNtMEIwWmNCaTM5MXdlZWQ0NmJUdUFQb0x3YzI3d1ZvUjQvd0NRZmJqZy93RFROYTI2NFA0TzNNTno4Tk5NRUxveGphWkhDa0hZM211MkQ2SERBL1FpdThvQTQ3NG1lSEkvRWZnZTlnMk85M2JLYnEwRWFsbU1xS1R0VlFSa3N1NWNjNDNad2NWelh3TDFuVTlROExYVmplcFBKYldNaUphWExuTzVDUDhBVmpnWjJZSFBvNEdBQUs5V0lCR0RSakZBQlJSUlFBVVVVVUFGRkZGQUJSUlJRQVVVVVVBRkZGRkFCUlJSUUFVVVVVQUl6YlZ6WHlKOFhOZWs4US9FdlV6bGhGWlA5aGlEcUFVRVdRK01kUVpESXdKNXdSMDZEM3I0c2VQN0x3ajRhdUxPTzRjNnpmUVBIYXhRdnRlTGNDdm1ramxRcDVIY2tZSFFrZWIvQUFYK0dVZXFHSHhWckVOdkxwM3pwYTJraXJJSmo4eU03Z2dqQU9RQjFKR2VBQnVBTkQ0U2ZEbVcvdWs4WGE3Wm9rTE1zOWhBcStVZk1EaHhNRlFnQk1naFZ4Z2c1d0JndDcwT2xGRkFCU0U0cGE1RDRsK0pyZnd6NEYxRzVlNGxodWJpSjdhemFISWZ6MlJncEJIM2NZSnprZE9PY0NnRHhUNHdYSThaZkZLejB2dytyMzExREI5aGVKSTJCRTZ5eUYxTzdBd0J6dSs2T1RuQXlQb0h3cm9NSGhqd3hwK2kyeDNSMnNJVXZnanpISnk3NEpPTnpGbXhuak9LOE4rQlBoYWZXUEVWMTR5dnJpVnpaeXVrVGtnbTRuZFQ1aFk1SjRWd2VuSmNIUEJCK2k2QUNzN1h0VEdqYUJxR3BtTHp2c2x0TGNlVnYyK1pzVXR0ejJ6aXRHcVdyYWREckdrWHVtWEJrV0c4dDVMZVJveUF5cTZsU1JualBQb2FBUG5qNEVTV0drM3ZpSHhKcVdvUjIxcHA5b2tNcGRUajk0MjRIUHFQS3dBQVNTM0hiTkRWTlIxTDQyZkVhenRMRld0Tk9qVXJDSkM3K1JFcHkwcnFEZ094d093enNVdC9FZFAvQUlaMThSRFVQTFhXTk0rd0dYQmx6SjVnanoxMmJjYnNjN2QrTThaNzE3VDRIOEVhYjRIMFQ3RFpqemJpVWhycTdkUUhuY2QvWlJrNFhQR1QzSkpBTjZ3c2JmVExHM3NyU1B5N2EzaVdHSk1rN1VVQUFaUEo0SGVyTkZGQUh5ZDhRdFA4VjNmeFkxaVNEU3J6KzBGbEZ6Yi9BR0dPUjI4aENGaW1VcmtqaFYrWVl3MlJ3UVJYWitCUGdMdFpML3hpU1Z5eWpUSTMrZ1Zua1J2Yy9LdnQ4M1ZhOSt3UFNqQUhhZ0JBTVZpK01wNWJYd1JyOXhCSzhNMFduWER4eVJ0dFpHRWJFRUhzUWNjMXQxaWVML0RjWGk3d3JmNkZOY1NXeTNTQUNhTVpLTXJCbE9PNDNLTWpqSXlNanJRQjhlYVBkVFJSM1ZyWldyU1gxOHEya1RSbjVsVm1HNVVVREpaK0V6bkcxblhCM2NmUnZ3ZytIRGVFckdUVmRWaWROY3VWYUpvaTZsWUl0L0NqYXhERTdWT2UzQUdNSEo4TlBoSEg0TG4vQUxYMUc0anVkWTh0NDBTTERRd3FjWUtrcUczWUJHN2poaU1kejZqaWdERDhYZUdvdkZ2aGUrME9lNGUzUzZWUUpVWEpSbFlPcHdlbzNLTWpqSTR5T3RmUDBmaGI0ci9EZDVSb3EzY2xxekFmNkJpNWlrWmdDVzhvZ2tIQ2dGeWdPUmpPRHo5TzBnQUhRQVVBZUQrRC9ncHF0M2VycW5pKzc4dmRLWkpiV09VdkpPZHpidk1rQndDVGc1QllrRThnOVBjYlN5Z3NiU0MxdGwyUVFSckZHbVNkcXFNQVpQUFFDckdCNlVVQVkzaVR3dnBmaXpSWnRLMWVEenJlVDVsSXdIaWNkSFE5bUdmeEdRY2drSHg2L3dEMmN4SDlwZXc4VEFBNzJnaXVMUURvRHNWblZ2b0N3WDFJSGF2ZXFLQVBHdEYvWi8wNnp2bGsxVFc1NzYzVWgvSmhnOGplUXdPR2JleDJrWkJBd2VlQ08vb1doK0EvRFBoMjZOMXBta3d3M0pHQkt4YVJsNElPMHVTVnlDUWNZejN6WFIwVUFJQmpwakZMUlJRQVVVVVVBRkl5aGhnZ0g2MHRGQUhoSHhCK0VXdXY0bm04UStFNVhsbHVyZ3pQYnJMNVVrRDRERjBkbXdjdnVQVWJTVkFCR1NNWmRjK05WbkE4Q3c2cTYyYkNGbU5oSE16ZmV4aGloTW4zZVc1SFE1K1pTZnBDaWdENW1Id3UrSlBpYlVMT0R4QTl3dHNwSU54ZVg2M0FnQndXS2dPeHljQWNkVGpKQTVyM2Z3VjRSc3ZCWGg1TktzbmVYTG1XZVp1UE5sSUFZZ2Z3akFBQTdBRGtuSlBRN1JuT0JuMXBhQUNpaWlnQW9vb29BS0tLS0FDaWlpZ0Fvb29vQUs4eStNM2dQVVBHT2gyVStsSVo5UXNaR3hBWFZBOGJnQnNidU53S29lU0JnTjN4WHB0RkFIekpMNEwrTWQzYnlXMDl4cThzTXFtT1NPVFdsWU1wR0NDREx5TUhHRDYxcDZMK3p6cWx4cGtjMnE2NURZWFRZUGtSVy9uN0FRRGd0dVVCZ1NRUXVSeHdUbXZvakFIYWpBOUtBT04wRDRXK0VmRDA5dmRXbWtvOTVDaXFMaTVjeXNXR0R2d1R0VnNqT1ZBeHpqQXJyWjdhSzVna2duUlpJcFZLUEc0eXJLZW9JOTZsb29BcldOaGFhYmFwYTJOdEJhMnlaMlF3UmhFWEp5Y0tPQmtrbjhhczBVVUFGRkZGQUJSUlJRQVVVVVVBRkZGRkFCUlJSUUFVVVVVQUZGRkZBQlJSUlFBVnpYalR4dHBuZ25TUHRsODIrZVRLMnRxcCtlZHZiMFVaR1dQQXlPcElCcytLL0U5bDRUOFBYR3JYcnB0alUrVEd6YlRQSmc3WTF3Q2NuSFhCd01rOEFrZktYamp4WHFmalBWQnJsN2FtQ0p5MXZheHhxVEdpb2R4WGRnYm1HOEVuL2JCd0JnQUFwTzJ0L0VIeGxGSEpNYnJWTlJsamlNaFRhRGdCZHhDTHdxcU1rZ2NBRTE5ZytHOUVnOFBlRzlPMGlEeXlsbkFrUmVPSVJpUmdQbWZhT2hac3NldkpQSnJ5UDluM3djOXJZeitMcmlTUlpMeFh0cmFJYmRyUmhsTFNIdmt1aFVBNCs2VHprVjdpTTQ1NjBBRkZGRkFCWHpIOFp2R0V2aXp4VGJhRHBUcGQ2ZGFsUEpObktaaGRUU0JlUUY0SkdTZ0F5UWQzUE9CN3Y0KzhSeStFL0JXcDYxQkFrODl2R29pamtZaFN6dXFBbkhKd1dCd01aeGpJem12RXZnWjRDdU5TMXFMeFRxRnJ0MDYxeTFyNWdINzZiT053QkhLcjh4M2NZY0xnbkRDZ0QyN3dQNFR0UEIvaGUxMHlDSkVtTWFQZU1rak9zayt4VmR3VzV3ZHZBd0I3Q3VrcEJuSE5MUUFVVVVVQUZGRkZBQlJSUlFBVVVVVUFGRkZGQUJSUlJRQVVVVVVBRkZGRkFCUlJSUUFVVVVVQUZGRkZBQlJSUlFBVVVVVUFGRkZGQUJSUlJRQVVVVVVBRkZGRkFCUlJSUUFVVVVVQUZGRkZBQlJSUlFBVVVVVUFGRkZGQUJSUlJRQVVVVVVBRkZGRkFCUlJSUUFVVVVVQUZGRkZBQlJSUlFBVVVVVUFGVnIrK3RkTnRKTHU5dW9MVzNUYUdtbmRVUmNrQVpKSUE1SUZXVHgyelh6NThidkdVMnM2dkI0UTBhZDVvWTIyM2NWc1N4dUxnc0FrV0FNc1ZPTWdFamN3QkdWRkFITCtQZkdVdnhHOFJwSmJKY1E2SHA4SmtHNk5Ga2hqSVh6WGJMaFdZa0FLdTRaT3dERE56WDhNZUdaUGlQNDFnc0xTTzZoOE82Y3BpV2NJb2todHd6TXU0azQ4MTJaajNBWm1LcnRYQVpyOXpid3gybmdYd2pPYjhTM1FqdnIySlJDdXAzQmZFU2NzZmtUSUErWUlXSllEb3grZ3ZocDRKaDhGK0VyYTJlM2pUVTdoUkxmU0JSdWFUcUVKQklJUUhhTWNIazlXT1FEckxHeHR0TjArMnNiU1B5N2EyaVdHSk54YmFpZ0JSazhuZ0RyVmlpaWdBb29vb0FRZ0hyU0tnWHBucVQxcDFGQUJSUlJRQVVVVVVBRkZGRkFCUlJSUUFVVVVVQUZGRkZBQlJSUlFBVVVVVUFGRkZGQUJSUlJRQVVVVVVBRkZGRkFCUlJSUUFVVVVVQUZGRkZBQlJSUlFBVVVVVUFGRkZGQUJSUlJRQVVVVVVBRkZGRkFCUlJSUUFVVVVVQUZGRkZBQlJSUlFBVVVVVUFGRkZGQUJSUlJRQVVVVVVBRkZGRkFCUlJSUUFVVVVVQWN2NC84QUVpZUZmQk9wNm41NWl1ZkxNVm9SdExHZGdRbUZiZzRQekVjOEt4d2NZcjVMZzFlZTBFK3BwcU00MWlhVnRraVNTaWFMUEx6R1JXSExaS1krYklaODdTRkxkNThldkVFK29lT3pwTGZKYmFYR3FSaklJWjVGVjJicGtjRkJqSkh5NUhVMXBmQ1g0U2YybTBQaVR4SkJpdzRlMHM1Ri93Q1BqUElkeC9jOUFmdmRUOHYzd0RxUGdoOE9wTkd0bjhTNjNaN05SbjNKYXd6d3NzdHNnTEJtTzdHR2Y2ZmQ3L09SWHMxSUFCMHBhQUNpaWlnQW9vb29BS0tLS0FDaWlpZ0Fvb29vQUtLS0tBQ2lpaWdBb29vb0FLS0tLQUNpaWlnQW9vb29BS0tLS0FDaWlpZ0Fvb29vQUtLS0tBQ2lpaWdBb29vb0FLS0tLQUNpaWlnQW9vb29BS0tLS0FDaWlpZ0Fvb29vQUtLS0tBQ2lpaWdBb29vb0FLS0tLQUNpaWlnQW9vb29BS0tLS0FDaWlpZ0Fvb29vQUtLS0tBQ2lpaWdBb29vb0E0L1gvaG40YThSK0pMWFhyK3kzWGtHTjZyZ1IzT1B1K2FwQjNZd1BxQUFkeWpGZGNpN1Z4Z1U2aWdBb29vb0FLS0tLQUNpaWlnQW9vb29BS0tLS0FDaWlpZ0Fvb29vQUtLS0tBQ2lpaWdBb29vb0FLS0tLQUNpaWlnQW9vb29BS0tLS0FDaWlpZ0Fvb29vQUtLS0tBQ2lpaWdBb29vb0FLS0tLQUNpaWlnQW9vb29BS0tLS0FDaWlpZ0Fvb29vQUtLS0tBQ2lpaWdBb29vb0FLS0tLQUNpaWlnQW9vb29BS0tLS0FDaWlpZ0QvMlE9PQ==</SignID>
<SignPass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
<SignVertreter/>
<FpDG3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
<FpFinger1 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
<FpQualitaet1 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
<FpCaptureDevice1 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
<FpWSQ1 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
<FpFinger2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
<FpQualitaet2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
<FpCaptureDevice2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
<FpWSQ2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
</Person>
</PassAntrag>Regards,
Martin -
How to improve performance of a query that is based on an xmltype table
Dear Friends,
I have a query that is pulling records from an xmltype table with 9000 rows and it is running very slow.
I am using XMLTABLE command to retreive the rows. It is taking upto 30 minutes to finish.
Would you be able to suggest how I can make it faster. Thanks.
Below is the query.....
INSERT INTO temp_sap_po_receipt_history_t
(po_number, po_line_number, doc_year,
material_doc, material_doc_item, quantity, sap_ref_doc_no_long,
reference_doc, movement_type_code,
sap_ref_doc_no, posting_date, entry_date, entry_time, hist_type)
SELECT :pin_po_number po_number,
b.po_line_number, b.doc_year,
b.material_doc, b.material_doc_item, b.quantity, b.sap_ref_doc_no_long,
b.reference_doc, b.movement_type_code,
b.sap_ref_doc_no, to_date(b.posting_date,'rrrr-mm-dd'),
to_date(b.entry_date,'rrrr-mm-dd'), b.entry_time, b.hist_type
FROM temp_xml t,
XMLTABLE(XMLNAMESPACES('urn:sap-com:document:sap:rfc:functions' AS "n0"),
'/n0:BAPI_PO_GETDETAIL1Response/POHISTORY/item'
PASSING t.object_value
COLUMNS PO_LINE_NUMBER VARCHAR2(20) PATH 'PO_ITEM',
DOC_YEAR varchar2(4) PATH 'DOC_YEAR',
MATERIAL_DOC varchar2(30) PATH 'MAT_DOC',
MATERIAL_DOC_ITEM VARCHAR2(10) PATH 'MATDOC_ITEM',
QUANTITY NUMBER(20,6) PATH 'QUANTITY',
SAP_REF_DOC_NO_LONG VARCHAR2(20) PATH 'REF_DOC_NO_LONG',
REFERENCE_DOC VARCHAR2(20) PATH 'REF_DOC',
MOVEMENT_TYPE_CODE VARCHAR2(4) PATH 'MOVE_TYPE',
SAP_REF_DOC_NO VARCHAR2(20) PATH 'REF_DOC_NO',
POSTING_DATE VARCHAR2(10) PATH 'PSTNG_DATE',
ENTRY_DATE VARCHAR2(10) PATH 'ENTRY_DATE',
ENTRY_TIME VARCHAR2(8) PATH 'ENTRY_TIME',
HIST_TYPE VARCHAR2(5) PATH 'HIST_TYPE') b;Based on response from mdrake on this thread:
Re: XML file processing into oracle
For large XML's, you can speed up the processing of XMLTABLE by using a registered schema...
declare
SCHEMAURL VARCHAR2(256) := 'http://xmlns.example.org/xsd/testcase.xsd';
XMLSCHEMA VARCHAR2(4000) := '<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xdb="http://xmlns.oracle.com/xdb" xdb:storeVarrayAsTable="true">
<xs:element name="cust_order" type="cust_orderType" xdb:defaultTable="CUST_ORDER_TBL"/>
<xs:complexType name="groupType" xdb:maintainDOM="false">
<xs:sequence>
<xs:element name="item" type="itemType" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="id" type="xs:byte" use="required"/>
</xs:complexType>
<xs:complexType name="itemType" xdb:maintainDOM="false">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="id" type="xs:short" use="required"/>
<xs:attribute name="name" type="xs:string" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="cust_orderType" xdb:maintainDOM="false">
<xs:sequence>
<xs:element name="group" type="groupType" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="cust_id" type="xs:short" use="required"/>
</xs:complexType>
</xs:schema>';
INSTANCE CLOB :=
'<cust_order cust_id="12345">
<group id="1">
<item id="1" name="Standard Mouse">100</item>
<item id="2" name="Keyboard">100</item>
<item id="3" name="Memory Module 2Gb">200</item>
<item id="4" name="Processor 3Ghz">25</item>
<item id="5" name="Processor 2.4Ghz">75</item>
</group>
<group id="2">
<item id="1" name="Graphics Tablet">15</item>
<item id="2" name="Keyboard">15</item>
<item id="3" name="Memory Module 4Gb">15</item>
<item id="4" name="Processor Quad Core 2.8Ghz">15</item>
</group>
<group id="3">
<item id="1" name="Optical Mouse">5</item>
<item id="2" name="Ergo Keyboard">5</item>
<item id="3" name="Memory Module 2Gb">10</item>
<item id="4" name="Processor Dual Core 2.4Ghz">5</item>
<item id="5" name="Dual Output Graphics Card">5</item>
<item id="6" name="28inch LED Monitor">10</item>
<item id="7" name="Webcam">5</item>
<item id="8" name="A3 1200dpi Laser Printer">2</item>
</group>
</cust_order>';
begin
dbms_xmlschema.registerSchema
schemaurl => SCHEMAURL
,schemadoc => XMLSCHEMA
,local => TRUE
,genTypes => TRUE
,genBean => FALSE
,genTables => TRUE
,ENABLEHIERARCHY => DBMS_XMLSCHEMA.ENABLE_HIERARCHY_NONE
execute immediate 'insert into CUST_ORDER_TBL values (XMLTYPE(:INSTANCE))' using INSTANCE;
end;
SQL> desc CUST_ORDER_TBL
Name Null? Type
TABLE of SYS.XMLTYPE(XMLSchema "http://xmlns.example.org/xsd/testcase.xsd" Element "cust_order") STORAGE Object-relational TYPE "cust_orderType222_T"
SQL> set autotrace on explain
SQL> set pages 60 lines 164 heading on
SQL> col cust_id format a8
SQL> select extract(object_value,'/cust_order/@cust_id') as cust_id
2 ,grp.id as group_id, itm.id as item_id, itm.inm as item_name, itm.qty as item_qty
3 from CUST_ORDER_TBL
4 ,XMLTABLE('/cust_order/group'
5 passing object_value
6 columns id number path '@id'
7 ,item xmltype path 'item'
8 ) grp
9 ,XMLTABLE('/item'
10 passing grp.item
11 columns id number path '@id'
12 ,inm varchar2(30) path '@name'
13 ,qty number path '.'
14 ) itm
15 /
CUST_ID GROUP_ID ITEM_ID ITEM_NAME ITEM_QTY
12345 1 1 Standard Mouse 100
12345 1 2 Keyboard 100
12345 1 3 Memory Module 2Gb 200
12345 1 4 Processor 3Ghz 25
12345 1 5 Processor 2.4Ghz 75
12345 2 1 Graphics Tablet 15
12345 2 2 Keyboard 15
12345 2 3 Memory Module 4Gb 15
12345 2 4 Processor Quad Core 2.8Ghz 15
12345 3 1 Optical Mouse 5
12345 3 2 Ergo Keyboard 5
12345 3 3 Memory Module 2Gb 10
12345 3 4 Processor Dual Core 2.4Ghz 5
12345 3 5 Dual Output Graphics Card 5
12345 3 6 28inch LED Monitor 10
12345 3 7 Webcam 5
12345 3 8 A3 1200dpi Laser Printer 2
17 rows selected.Need at least 10.2.0.3 for performance i.e. to avoid COLLECTION ITERATOR PICKLER FETCH in execution plan...
On 10.2.0.1:
Execution Plan
Plan hash value: 3741473841
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 24504 | 89M| 873 (1)| 00:00:11 |
| 1 | NESTED LOOPS | | 24504 | 89M| 873 (1)| 00:00:11 |
| 2 | NESTED LOOPS | | 3 | 11460 | 805 (1)| 00:00:10 |
| 3 | TABLE ACCESS FULL | CUST_ORDER_TBL | 1 | 3777 | 3 (0)| 00:00:01 |
|* 4 | INDEX RANGE SCAN | SYS_IOT_TOP_774117 | 3 | 129 | 1 (0)| 00:00:01 |
| 5 | COLLECTION ITERATOR PICKLER FETCH| XMLSEQUENCEFROMXMLTYPE | | | | |
Predicate Information (identified by operation id):
4 - access("NESTED_TABLE_ID"="CUST_ORDER_TBL"."SYS_NC0000900010$")
filter("SYS_NC_TYPEID$" IS NOT NULL)
Note
- dynamic sampling used for this statementOn 10.2.0.3:
Execution Plan
Plan hash value: 1048233240
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 17 | 132K| 839 (0)| 00:00:11 |
| 1 | NESTED LOOPS | | 17 | 132K| 839 (0)| 00:00:11 |
| 2 | MERGE JOIN CARTESIAN | | 17 | 131K| 805 (0)| 00:00:10 |
| 3 | TABLE ACCESS FULL | CUST_ORDER_TBL | 1 | 3781 | 3 (0)| 00:00:01 |
| 4 | BUFFER SORT | | 17 | 70839 | 802 (0)| 00:00:10 |
|* 5 | INDEX FAST FULL SCAN| SYS_IOT_TOP_56154 | 17 | 70839 | 802 (0)| 00:00:10 |
|* 6 | INDEX UNIQUE SCAN | SYS_IOT_TOP_56152 | 1 | 43 | 2 (0)| 00:00:01 |
|* 7 | INDEX RANGE SCAN | SYS_C006701 | 1 | | 0 (0)| 00:00:01 |
Predicate Information (identified by operation id):
5 - filter("SYS_NC_TYPEID$" IS NOT NULL)
6 - access("SYS_NTpzENS1H/RwSSC7TVzvlqmQ=="."NESTED_TABLE_ID"="SYS_NTnN5b8Q+8Txi9V
w5Ysl6x9w=="."SYS_NC0000600007$")
filter("SYS_NC_TYPEID$" IS NOT NULL AND
"NESTED_TABLE_ID"="CUST_ORDER_TBL"."SYS_NC0000900010$")
7 - access("SYS_NTpzENS1H/RwSSC7TVzvlqmQ=="."NESTED_TABLE_ID"="SYS_NTnN5b8Q+8Txi9V
w5Ysl6x9w=="."SYS_NC0000600007$")
Note
- dynamic sampling used for this statement----------------------------------------------------------------------------------------------------------
-- CLEAN UP
DROP TABLE CUST_ORDER_TBL purge;
exec dbms_xmlschema.deleteschema('http://xmlns.example.org/xsd/testcase.xsd'); -
I have successfully created (at least I think) oracle text indexes on my XMLType table:
EXEC ctx_ddl.create_section_group('contract_xmlgroup', 'XML_SECTION_GROUP');
EXEC CTX_DDL.Add_Zone_Section (group_name => 'contract_xmlgroup', section_name => 'complete_entry', tag => 'complete_entry')
CREATE INDEX complete_entry ON boss_contracts INDEXTYPE IS ctxsys.context
parameters('section group contract_xmlgroup');
however I am unsure how to now search using CONTAINS with this index, I tried this at first:
SELECT count(*) FROM boss_contracts b
WHERE CONTAINS(value(b), 'string WITHIN complete_entry') > 0;
this just gave me the error:
ERROR at line 1:
ORA-20000: Oracle Text error:
DRG-10599: column is not indexed
any help would be appreciated
PaulIt looks like you are wanting to search by sub-directory names or a combination of sub-directory names. By default, Oracle Text views the directory delimiter / as white space, so the individual sub-directories are tokenized. Therefore, you don't need the wildcards or / to do your searches. Please see the example below.
SCOTT@orcl_11g> create table files_included
2 (pid varchar2 (16) not null,
3 filename varchar2 (40) not null)
4 /
Table created.
SCOTT@orcl_11g> insert all
2 into files_included values
3 ('123456-01', '/usr/bin/ls/a')
4 into files_included values
5 ('123456-02', '/usr/bin/ls/b')
6 into files_included values
7 ('123456-03', '/usr/x/ls/a')
8 into files_included values
9 ('123456-02', '/usr/bin/x/b')
10 into files_included values
11 ('654321', '/usr/bin/other')
12 select * from dual
13 /
5 rows created.
SCOTT@orcl_11g> create index myindex
2 on files_included (filename)
3 indextype is ctxsys.context
4 /
Index created.
SCOTT@orcl_11g> select token_text
2 from dr$myindex$i
3 /
TOKEN_TEXT
B
BIN
LS
OTHER
USR
X
6 rows selected.
SCOTT@orcl_11g> select * from files_included
2 where contains (filename, 'bin ls') > 0
3 /
PID FILENAME
123456-01 /usr/bin/ls/a
123456-02 /usr/bin/ls/b
SCOTT@orcl_11g> select * from files_included
2 where contains (filename, 'bin') > 0
3 /
PID FILENAME
123456-01 /usr/bin/ls/a
123456-02 /usr/bin/ls/b
123456-02 /usr/bin/x/b
654321 /usr/bin/other
SCOTT@orcl_11g> select * from files_included
2 where contains (filename, 'ls') > 0
3 /
PID FILENAME
123456-01 /usr/bin/ls/a
123456-02 /usr/bin/ls/b
123456-03 /usr/x/ls/a
SCOTT@orcl_11g> -
I am using a xmltype table for parsing the xml file and then storing the tag values into someother tables.
The table syntax
CREATE GLOBAL TEMPORARY TABLE ATLAS.XML_PROCESS
XML_DATA XMLTYPE
ON COMMIT DELETE ROWS;
At a time i will parse only one xml file. And them the content will be deleted and then i will parse another xml file.
The parsing of the xml file is taking much CPU time and also it is taking more FETCH time. ( i have seen from the trace file)
Do i need to create any index on this table?
Please suggest me how can i imrove the performence.
ThanksHi
Why do you use a GTT? Just keep your xml in memory...
HTH
Chris -
Exporting xmltype table data into xml/txt file
I want to export data stored in oracle as xmltype table into xml format file.
I want to use alternatives to the method shown below as my xml file is large.
set long 10000000
spool c:\\StudentXMLJan08.xml
SELECT
XMLElement("Student",
XMLForest(s.studentid "studentid",
s.firstname "firstname",
s.lastname "surname"),
XMLElement("enrollments",
(SELECT XMLAGG(
XMLForest(sc.coursecode "courseid"))
FROM studentcourse sc
WHERE sc.studentid = s.studentid
and sc.is_approved='Y'
and sc.takenyear='2008'
and sc.takenterm='1')))
FROM student s
where s.statuscode in (select studentstatuscode from studentstatus where studentstatusactive=1)
order by s.studentid;
spool off
please help, thank youHow's this one for size
SQL> create or replace view DEPARTMENT_XML of xmltype
2 with object id
3 (
4 'DEPARTMENT'
5 )
6 as
7 select xmlElement
8 (
9 "Departments",
10 (
11 select xmlAgg
12 (
13 xmlElement
14 (
15 "Department",
16 xmlAttributes( d.DEPARTMENT_ID as "DepartmentId"),
17 xmlElement("Name", d.DEPARTMENT_NAME),
18 xmlElement
19 (
20 "Location",
21 xmlForest
22 (
23 STREET_ADDRESS as "Address", CITY as "City", STATE_PROVINCE as "State",
24 POSTAL_CODE as "Zip",COUNTRY_NAME as "Country"
25 )
26 ),
27 xmlElement
28 (
29 "EmployeeList",
30 (
31 select xmlAgg
32 (
33 xmlElement
34 (
35 "Employee",
36 xmlAttributes ( e.EMPLOYEE_ID as "employeeNumber" ),
37 xmlForest
38 (
39 e.FIRST_NAME as "FirstName", e.LAST_NAME as "LastName", e.EMAIL as "EmailAddre
ss",
40 e.PHONE_NUMBER as "Telephone", e.HIRE_DATE as "StartDate", j.JOB_TITLE as "Job
Title",
41 e.SALARY as "Salary", m.FIRST_NAME || ' ' || m.LAST_NAME as "Manager"
42 ),
43 xmlElement ( "Commission", e.COMMISSION_PCT )
44 )
45 )
46 from HR.EMPLOYEES e, HR.EMPLOYEES m, HR.JOBS j
47 where e.DEPARTMENT_ID = d.DEPARTMENT_ID
48 and j.JOB_ID = e.JOB_ID
49 and m.EMPLOYEE_ID = e.MANAGER_ID
50 )
51 )
52 )
53 )
54 from HR.DEPARTMENTS d, HR.COUNTRIES c, HR.LOCATIONS l
55 where d.LOCATION_ID = l.LOCATION_ID
56 and l.COUNTRY_ID = c.COUNTRY_ID
57 )
58 )
59 from dual
60 /
View created.
SQL> create or replace trigger DEPARTMENT_DML
2 instead of INSERT or UPDATE or DELETE
3 on DEPARTMENT_XML
4 begin
5 null;
6 end;
7 /
Trigger created.
SQL> declare
2 cursor getDepartments is
3 select ref(d) XMLREF
4 from DEPARTMENT_XML d;
5 res boolean;
6 targetFolder varchar2(1024) := '/public/Departments';
7 begin
8 if dbms_xdb.existsResource(targetFolder) then
9 dbms_xdb.deleteResource(targetFolder,dbms_xdb.DELETE_RECURSIVE_FORCE);
10 end if;
11 res := dbms_xdb.createFolder(targetFolder);
12 for dept in getDepartments loop
13 res := DBMS_XDB.createResource(targetFolder || '/Departments.xml', dept.XMLREF);
14 end loop;
15 end;
16 /
PL/SQL procedure successfully completed.
SQL> select path
2 from path_view
3 where equals_path(RES,'/public/Departments/Departments.xml') = 1
4 /
PATH
/public/Departments/Departments.xml
SQL> select xdburitype('/public/Departments/Departments.xml').getXML()
2 from dual
3 /
XDBURITYPE('/PUBLIC/DEPARTMENTS/DEPARTMENTS.XML').GETXML()
<Departments>
<Department DepartmentId="60">
<Name>IT</Name>
<Location
SQL> quit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
C:\Temp>ftp localhost
Connected to mdrake-lap.
220- mdrake-lap
Unauthorised use of this FTP server is prohibited and may be subject to civil and criminal prosecution.
220 mdrake-lap FTP Server (Oracle XML DB/Oracle Database) ready.
User (mdrake-lap:(none)): SCOTT
331 pass required for SCOTT
Password:
230 SCOTT logged in
ftp> cd /public/Departments
250 CWD Command successful
ftp> ls -l
200 EPRT Command successful
150 ASCII Data Connection
-rw-r--r-- 1 SCOTT oracle 0 NOV 10 20:18 Departments.xml
226 ASCII Transfer Complete
ftp: 71 bytes received in 0.01Seconds 7.10Kbytes/sec.
ftp> get Departments.xml -
200 EPRT Command successful
150 ASCII Data Connection
<Departments><Department DepartmentId="60"><Name>IT</Name><Location><Address>2014 Jabberwocky Rd</Address><City>Southlak
e</City><State>Texas</State><Zip>26192</Zip><Country>United States of America</Country></Location><EmployeeList><Employe
e employeeNumber="103"><FirstName>Alexander</FirstName><LastName>Hunold</LastName><EmailAddress>AHUNOLD</EmailAddress><T
elephone>590.423.4567</Telephone><StartDate>2006-01-03</StartDate><JobTitle>Programmer</JobTitle><Salary>9000</Salary><M
anager>Lex De Haan</Manager><Commission></Commission></Employee><Employee employeeNumber="105"><FirstName>David</FirstNa
me><LastName>Austin</LastName><EmailAddress>DAUSTIN</EmailAddress><Telephone>590.423.4569</Telephone><StartDate>2005-06-
25</StartDate><JobTitle>Programmer</JobTitle><Salary>4800</Salary><Manager>Alexander Hunold</Manager><Commission></Commi
ssion></Employee><Employee employeeNumber="106"><FirstName>Valli</FirstName><LastName>Pataballa</LastName><EmailAddress>
VPATABAL</EmailAddress><Telephone>590.423.4560</Telephone><StartDate>2006-02-05</StartDate><JobTitle>Programmer</JobTitl
e><Salary>4800</Salary><Manager>Alexander Hunold</Manager><Commission></Commission></Employee><Employee employeeNumber="
107"><FirstName>Diana</FirstName><LastName>Lorentz</LastName><EmailAddress>DLORENTZ</EmailAddress><Telephone>590.423.556
7</Telephone><StartDate>2007-02-07</StartDate><JobTitle>Programmer</JobTitle><Salary>4200</Salary><Manager>Alexander Hun
old</Manager><Commission></Commission></Employee><Employee employeeNumber="104"><FirstName>Bruce</FirstName><LastName>Er
nst</LastName><EmailAddress>BERNST</EmailAddress><Telephone>590.423.4568</Telephone><StartDate>2007-05-21</StartDate><Jo
bTitle>Programmer</JobTitle><Salary>6000</Salary><Manager>Alexander Hunold</Manager><Commission></Commission></Employee>
</EmployeeList></Department><Department DepartmentId="50"><Name>Shipping</Name><Location><Address>2011 Interiors Blvd</A
ddress><City>South San Francisco</City><State>California</State><Zip>99236</Zip><Country>United States of America</Count
ry></Location><EmployeeList><Employee employeeNumber="120"><FirstName>Matthew</FirstName><LastName>Weiss</LastName><Emai
lAddress>MWEISS</EmailAddress><Telephone>650.123.1234</Telephone><StartDate>2004-07-18</StartDate><JobTitle>Stock Manage
r</JobTitle><Salary>8000</Salary><Manager>Steven King</Manager><Commission></Commission></Employee><Employee employeeNum
ber="122"><FirstName>Payam</FirstName><LastName>Kaufling</LastName><EmailAddress>PKAUFLIN</EmailAddress><Telephone>650.1
23.3234</Telephone><StartDate>2003-05-01</StartDate><JobTitle>Stock Manager</JobTitle><Salary>7900</Salary><Manager>Stev
en King</Manager><Commission></Commission></Employee><Employee employeeNumber="121"><FirstName>Adam</FirstName><LastName
Fripp</LastName><EmailAddress>AFRIPP</EmailAddress><Telephone>650.123.2234</Telephone><StartDate>2005-04-10</StartDate><JobTitle>Stock Manager</JobTitle><Salary>8200</Salary><Manager>Steven King</Manager><Commission></Commission></Employee
<Employee employeeNumber="124"><FirstName>Kevin</FirstName><LastName>Mourgos</LastName><EmailAddress>KMOURGOS</EmailAddress><Telephone>650.123.5234</Telephone><StartDate>2007-11-16</StartDate><JobTitle>Stock Manager</JobTitle><Salary>5800<
/Salary><Manager>Steven King</Manager><Commission></Commission></Employee><Employee employeeNumber="123"><FirstName>Shan
ta</FirstName><LastName>Vollman</LastName><EmailAddress>SVOLLMAN</EmailAddress><Telephone>650.123.4234</Telephone><Start
Date>2005-10-10</StartDate><JobTitle>Stock Manager</JobTitle><Salary>6500</Salary><Manager>Steven King</Manager><Commiss
ion></Commission></Employee><Employee employeeNumber="128"><FirstName>Steven</FirstName><LastName>Markle</LastName><Emai
lAddress>SMARKLE</EmailAddress><Telephone>650.124.1434</Telephone><StartDate>2008-03-08</StartDate><JobTitle>Stock Clerk
</JobTitle><Salary>2200</Salary><Manager>Matthew Weiss</Manager><Commission></Commission></Employee><Employee employeeNu
mber="127"><FirstName>James</FirstName><LastName>Landry</LastName><EmailAddress>JLANDRY</EmailAddress><Telephone>650.124
.1334</Telephone><StartDate>2007-01-14</StartDate><JobTitle>Stock Clerk</JobTitle><Salary>2400</Salary><Manager>Matthew
Weiss</Manager><Commission></Commission></Employee><Employee employeeNumber="126"><FirstName>Irene</FirstName><LastName>
Mikkilineni</LastName><EmailAddress>IMIKKILI</EmailAddress><Telephone>650.124.1224</Telephone>
<StartDate>2002-06-07</St
artDate><JobTitle>Public Relations Representative</JobTitle><Salary>10000</Salary><Manager>Neena Kochhar</Manager><Commi
ssion></Commission></Employee></EmployeeList></Department></Departments>226 ASCII Transfer Complete
ftp: 40392 bytes received in 0.08Seconds 480.86Kbytes/sec.
ftp> -
apart from XQuery,
i know Oracle provided X-Path based search also.
can anyone direct me what's wrong with the following statement?
it returns "no rows selected".
THX~
e.g.1
select extract(value(it),'/Cap/@ctitle').getStringVal() as CTITLE
from ord_xmltype_tbl,
table (xmlsequence(extract(object_value,'Ordinace/Chapter/Cap'))) it
where contains (object_value,'Commonwealth INPATH (/Ordinance/Chapter/Cap/Section/Content/English)') > 0;
e.g.2
select extract(object_value,'/Ordinance/Chapter/Cap/@ctitle').getStringVal() as CTITLE
from ord_xmltype_tbl,
table (xmlsequence(extract(object_value,'/Ordinace/Chapter/Cap'))) it
where existsnode(object_value,'//English[contains(.,"SHORT TITLE AND APPLICATION")>0]')>0;
e.g.3
select extract(value(it),'/Cap/@ctitle').getStringVal() as CTITLE
from ord_xmltype_tbl,
table (xmlsequence(extract(object_value,'/Ordinace/Chapter/Cap'))) it
where existsnode(object_value,'//English[ora:contains(.,"SHORT TITLE AND APPLICATION")>0]', 'xmlns:ora="http://xmlns.oracle.com/xdb"')>0;
and what index i should create for the xmltype table?
in order to speed up the search?
this is the skeleton of the xmltype table
<Ordinance xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://localhost:8081/public/hkliss/ordinance.xsd">
<Chapter ctitle="致命意外條例" etitle="FATAL ACCIDENTS ORDINANCE" id="22">
<Cap ctitle="致命意外條例" etitle="FATAL ACCIDENTS ORDINANCE" id="22">
<Section ctitle="詳題" etitle="Long title" id="0">
<VersionDate>1997-06-30</VersionDate>
<Content>
<Chinese></Chinese>
<English></English>
</Content>
</Section>
</Cap>
<Cap>....</Cap>
<Cap>....</Cap>
<Cap>....</Cap>
<Cap>....</Cap>
<Cap>....</Cap>
<Cap>....</Cap>
</Chapter>
</Ordinance>
thx, expert~
i'm held up in my project right now~~~(please read a little from the manuals...you have already spend so much time on asking stuff, that if you would have
read manuals, you also would understand the things pointed out to you and it would have given you a faster result...)
http://download-uk.oracle.com/docs/cd/B19306_01/server.102/b14200/functions051.htm#i1006712
http://download-uk.oracle.com/docs/cd/B19306_01/server.102/b14200/functions048.htm#i1006711
http://download-uk.oracle.com/docs/cd/B19306_01/server.102/b14200/functions052.htm#i1131042
The optional namespace_string must resolve to a VARCHAR2 value that specifies a default mapping or namespace mapping for prefixes, which Oracle uses when evaluating the XPath expression(s).
is xmlns:ora="http://xmlns.oracle.com/xdb evaluating your Xpath expression, I don't think so...
If I take your examples shown here (http://forums.oracle.com/forums/message.jspa?messageID=1765571#1765571) as a starting point...
the query:
select extract(value(it),'/Cap/@ctitle').getStringVal() as CTITLE
from ord_xmltype_tbl,
table (xmlsequence(extract(object_value,'/Ordinace/Chapter/Cap'))) it
where existsnode(object_value,'//English[ora:contains(.,"SHORT TITLE AND APPLICATION")>0]', 'xmlns:ora="http://xmlns.oracle.com/xdb"')>0;would resolve in
select extract(value(it),'/Cap/@ctitle').getStringVal() as CTITLE
from ord_xmltype_tbl,
table (xmlsequence(extract(object_value,'/Ordinace/Chapter/Cap', 'xmlns:ora="http://localhost:8081/public/hkliss/ordinance.xsd"'))) it
where existsnode(object_value,'//English[ora:contains(.,"SHORT TITLE AND APPLICATION")>0]', 'xmlns:ora="http://localhost:8081/public/hkliss/ordinance.xsd"')>0;
But I would start with a simple "extract" or "existnode" statement, see if I get data output, and then build my SQL statement from there.
Maybe you are looking for
-
Registering multiple ipods using the same apple id
I just purchased a new nano for my wife. I was about to register her ipod using my apple id and itunes account so we could just use the same account to order music. Am I able to do this? I did not continue just incase registering her nano would "de-r
-
Evga 8800gt issue with my P6N SLI
I recently purchased a bunch of new parts to build my new computer. MSI P6N SLI 6750 core 2 duo EVGA 8800GT OC G.skill 4GB (2 x 2gb sticks) 430W PSU *yes with enough amps for the card.. 3 12v rails totals 30+amps The problem im having is the card isn
-
CreateListItem Action at work flow not trigger Event reciever
Hello , I have two Lists (List1 , List2). I have attached Workflow by SharePoint designer to List 1 . I have attached event receiver (Item was added) to list 2 . In the workflow . I use "CreateListItem" to create new item in list 2. I have test
-
Just wanted to say congratulations to Adobe/Adobe Labs for the Panels...what a great workflow advantage. I'd be happy as a clam in sand just the way it is because of the efficiency it gives my process. Not to look at a gift horse in the mouth however
-
Would Adobe Creative Suite 6 work on Mountain Lion?
Hey guys, does anyone have any idea if Adobe Creative Suite 6 Design edition works on Mountain Lion or not?