How to Index a XMLTYPE table
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.
Thanks
Hi
Why do you use a GTT? Just keep your xml in memory...
HTH
Chris
Similar Messages
-
How an INDEX of a Table got selected when a SELECT query hits the Database
Hi All,
How an Index got selected when a SELECT query hits the Database Table.
My SELECT query is as ahown below.
SELECT ebeln ebelp matnr FROM ekpo
APPENDING TABLE i_ebeln
FOR ALL ENTRIES IN i_mara_01
WHERE werks = p_werks AND
matnr = i_mara_01-matnr AND
bstyp EQ 'F' AND
loekz IN (' ' , 'S') AND
elikz = ' ' AND
ebeln IN s_ebeln AND
pstyp IN ('0' , '3') AND
knttp = ' ' AND
ko_prctr IN r_prctr AND
retpo = ''.
The fields in the INDEX of the Table EKPO should be in the same sequence as in the WHERE clasuse?
Regards,
VijiHi,
You minimize the size of the result set by using the WHERE and HAVING clauses. To increase the efficiency of these clauses, you should formulate them to fit with the database table indexes.
Database Indexes
Indexes speed up data selection from the database. They consist of selected fields of a table, of which a copy is then made in sorted order. If you specify the index fields correctly in a condition in the WHERE or HAVING clause, the system only searches part of the index (index range scan).
The primary index is always created automatically in the R/3 System. It consists of the primary key fields of the database table. This means that for each combination of fields in the index, there is a maximum of one line in the table. This kind of index is also known as UNIQUE. If you cannot use the primary index to determine the result set because, for example, none of the primary index fields occur in the WHERE or HAVING clause, the system searches through the entire table (full table scan). For this case, you can create secondary indexes, which can restrict the number of table entries searched to form the result set.
reference : help.sap.com
thanx. -
How to 'DESCRIBE' a XMLType table
Hi,
When I describe a XMLType table, the output is truncated as follow :
SQL> desc scott.purchaseorder
Name Null? Type
TABLE of SYS.XMLTYPE(XMLSchema "http://localhost:8080/home/SCOTT/poSource/xsd/purchaseOrder.xsd" Ele
Is there any way to show the complete string ?
I have tried 'SET LONG' and 'SET LINESIZE', but not succeeded.
Any suggestion ?I've also found under windows that using sqlplus within a command window gives better results with wrapping text than using sqlplusw (the gui version). Also Oracle are deprecating sqlplusw in favour of the SQL worksheet in enterprise manager from version 10 onwards, although it does still get installed at the moment if you really want to keep using it.
Regards -
How to check a XMLTYPE table for corrupted (not invalid!) XML records ??
Hello,
I'd like to get help on the following issue, please. I need to check the XML data in a number of tables with XMLTYPE data type. Some of the data is corrupted but in terms not that the XML format is wrong but there is no XML at all in the fields but just only, for example, control characters (no tags, no anything, just corrupted data).
So, I have made a PL/SQL procedure cursor to get all the tables from a list, and then another cursor inside to browse each table for corrupted records. But can you help me how to check this? Any of the XML functions like for example: XMLIsValid, isFragment(), getrootelement(), etc. return to me an Oracle error "ORA-31011 XML parsing failed" and the procedure gets stuck on the first found bad record. But I need to continue and check all of them. Is it possible to get the ORA-31011 error with EXCEPTION, write to a logging table the corrupted record ID, and then continue?
Here is my simple procedure:
CREATE OR REPLACE PROCEDURE CHECKXML (v_schema in VARCHAR2)
IS
v_Message VARCHAR2(254);
sql_stmt1 VARCHAR2(1000);
sql_stmt2 VARCHAR2(1000);
c1 SYS_REFCURSOR;
c2 SYS_REFCURSOR;
cur_tab varchar2(100);
cur_appl varchar2(100);
cur_rec varchar2(200);
valid_flag number;
criteria VARCHAR2(20);
tab1 VARCHAR2(20);
tab2 VARCHAR2(20);
BEGIN
criteria := 'XMLTYPE';
sql_stmt1 := 'select id, path from ' || v_schema || '.stubfiles where type=:bcriteria';
open c1 for sql_stmt1 using criteria;
loop
begin
fetch c1 into cur_tab, cur_appl;
exit when c1%notfound;
insert into system.log_table values (sysdate, v_schema, 'next table', 'id ' || cur_tab, 'appl ' || cur_appl, '');
sql_stmt2 := 'select t.recid, t.xmlrecord.isFragment() from ' || v_schema || '.' || cur_tab || ' t';
open c2 for sql_stmt2;
loop
begin
fetch c2 into cur_rec, valid_flag;
exit when c2%notfound;
insert into system.log_table values (sysdate, v_Schema, 'next record', 'id ' || cur_tab, 'recid ' || cur_rec, 'valid ' || valid_flag);
commit;
EXCEPTION
WHEN OTHERS THEN v_Message := sqlerrm;
dbms_output.put_line('Error for ' || cur_tab);
dbms_output.put_line('-' || v_Message);
insert into system.log_table values (sysdate, cur_tab, 'id err' || c_Row.ID,'appl err' || c_Row.path, v_Message,'');
end;
end loop;
close c2;
commit;
end;
end loop;
close c1;
commit;
END CHECKXML;
Thanks in advance
EvgeniHi
Why do you use a GTT? Just keep your xml in memory...
HTH
Chris -
How to link a XMLType table to a repository?
I follow following steps:
1) register a schema and generate a default table
2) insert XML documents ( specifing the schema just registered) into the table by using SQL
But how to let those XML documents show up in the repository so that users can access to them by using HTTP/FTP so that any update done to the table will be reflected in the repository and vice versa.
I tried many things but no luck.Everything looks OK to me. In the folllowing example the createResource() is the equivilant of the WebDAV copy. Do you have multiple database instances running on the server machine. It is possible that the WebDAV connection is connected to another database instance.
What folder are you copying the data into
Can you do
select path from path_view where under_path(res,'/targetFolderForWebDav') = 1
SQL>
SQL> var schemaURL varchar2(256)
SQL> var schemaPath varchar2(256)
SQL> --
SQL> begin
2 :schemaURL := 'http://localhost:8090/CMDEMO/fullname.xsd';
3 :schemaPath := '/public/testcase.xsd';
4 end;
5 /
PL/SQL procedure successfully completed.
SQL> call dbms_xmlSchema.deleteSchema(:schemaURL,4)
2 /
Call completed.
SQL> declare
2 res boolean;
3 xmlSchema xmlType := xmlType(
4 '<?xml version="1.0"?>
5 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xdb="http://xmlns.oracle.com/xdb">
6 <xs:element name="fullName" type="xs:string" xdb:defaultTable="FULL_NAME_TABLE"/>
7 </xs:schema>
8 ');
9 begin
10 if (dbms_xdb.existsResource(:schemaPath)) then
11 dbms_xdb.deleteResource(:schemaPath);
12 end if;
13 res := dbms_xdb.createResource(:schemaPath,xmlSchema);
14 end;
15 /
PL/SQL procedure successfully completed.
SQL> begin
2 dbms_xmlschema.registerSchema
3 (
4 :schemaURL,
5 xdbURIType(:schemaPath).getClob(),
6 TRUE,TRUE,FALSE,TRUE
7 );
8 end;
9 /
PL/SQL procedure successfully completed.
SQL> desc FULL_NAME_TABLE
Name Null? Type
TABLE of SYS.XMLTYPE(XMLSchema "http://localhost:8090/CMDEMO/fullname.xsd" Element "fullName")
SQL> --
SQL> set long 100000 lines 150
SQL> --
SQL> select *
2 from FULL_NAME_TABLE
3 /
no rows selected
Execution Plan
Plan hash value: 3651065813
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 1 | 2022 | 2 (0)| 00:00:01 |
|* 1 | TABLE ACCESS FULL| FULL_NAME_TABLE | 1 | 2022 | 2 (0)| 00:00:01 |
Predicate Information (identified by operation id):
1 - filter(SYS_CHECKACL("ACLOID","OWNERID",xmltype('<privilege
xmlns="http://xmlns.oracle.com/xdb/acl.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.oracle.com/xdb/acl.xsd
http://xmlns.oracle.com/xdb/acl.xsd DAV:http://xmlns.oracle.com/xdb/dav.xsd">
<read-properties/><read-contents/></privilege>'))=1)
Note
- dynamic sampling used for this statement
SQL> declare
2 res boolean;
3 docPath varchar2(40) := '/public/testcase.xml';
4 xmldata xmlType := xmlType(
5 '<fullName xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
6 xsi:noNamespaceSchemaLocation="http://localhost:8090/CMDEMO/fullname.xsd">
7 David King
8 </fullName>');
9 begin
10 if (dbms_xdb.existsResource(docPath)) then
11 dbms_xdb.deleteResource(docpath);
12 end if;
13 res := dbms_xdb.createResource(docPath,xmldata);
14 end;
15 /
PL/SQL procedure successfully completed.
SQL> select *
2 from FULL_NAME_TABLE
3 /
SYS_NC_ROWINFO$
<fullName xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://localhost:8090/CMDEMO/fullname.xsd">
David King
</fullName>
Execution Plan
Plan hash value: 3651065813
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 1 | 2022 | 3 (0)| 00:00:01 |
|* 1 | TABLE ACCESS FULL| FULL_NAME_TABLE | 1 | 2022 | 3 (0)| 00:00:01 |
Predicate Information (identified by operation id):
1 - filter(SYS_CHECKACL("ACLOID","OWNERID",xmltype('<privilege
xmlns="http://xmlns.oracle.com/xdb/acl.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.oracle.com/xdb/acl.xsd
http://xmlns.oracle.com/xdb/acl.xsd DAV:http://xmlns.oracle.com/xdb/dav.xsd">
<read-properties/><read-contents/></privilege>'))=1)
Note
- dynamic sampling used for this statement
SQL>
SQL>
SQL>
SQL> -
Join two xmltype table using Xquery
I am wondering how to join two xmltype tables in xml db database. both tables are schema based object-relational tables.
these are the examples:
academicProgram table contain batch of academicprogram.xml entries
<academicProgram>
<listOfCourse>
<course><id>1</id></course>
<course><id>2</id></course>
</listOfCourse>
</academicProgram>
course table contain all the course entries, each of them is an xml file based on the the course schema. for example,
course1.xml
<course>
<id>1</id>
<title>xxxxxxx</title>
<description>xxxxxxxxxxxxxx</description>
</course>
I used the following xquery code to merge the detailed course information from course table to the academic program information
select *
from XMLTable(
for $program in ora:view("HTU", "ACADEMICPROGRAM")
return <academicProgram xmlns="http://www.mdanderson.org/schema/APEP/courseCatalog"
for $node in $program/academicProgram/node()
return if (name($node) eq "listOfCourse")
then (
<listOfCourse>{
for $i in $node/course
for $j in ora:view("HTU", "COURSE")/course
where $i/id eq $j/id
return $j
}</listOfCourse>
else $node
</academicProgram>
it did return what I want, but the problem is it take more than 5 minutes to finish. is there someway to make it run faster? I have been struggling for a week, please help.
thanks in advance.
HailiDoes this work...
SQL> var schemaURL varchar2(256)
SQL> var schemaPath varchar2(256)
SQL> --
SQL> set autotrace on explain
SQL> set lines 150 pages 0 long 10000
SQL> --
SQL> begin
2 :schemaURL := 'http://aahmb10-147:7575/public/www.mdanderson.org/schema/APEP/custom.xsd';
3 :schemaPath := '/public/custom.xsd';
4 end;
5 /
PL/SQL procedure successfully completed.
SQL> call dbms_xmlSchema.deleteSchema(:schemaURL,4)
2 /
Call completed.
SQL> declare
2 res boolean;
3 xmlSchema xmlType := xmlType(
4 '<xs:schema xmlns:apcustom="http://www.mdanderson.org/schema/APEP/custom" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="
http://www.mdanderson.org/schema/APEP/custom" elementFormDefault="qualified" attributeFormDefault="unqualified">
5 <xs:element name="CourseCatalogCustomDataType">
6 <xs:annotation>
7 <xs:documentation>Comment describing your root element</xs:documentation>
8 </xs:annotation>
9 </xs:element>
10 </xs:schema>');
11 begin
12 if (dbms_xdb.existsResource(:schemaPath)) then
13 dbms_xdb.deleteResource(:schemaPath);
14 end if;
15 res := dbms_xdb.createResource(:schemaPath,xmlSchema);
16 end;
17 /
PL/SQL procedure successfully completed.
SQL> begin
2 dbms_xmlschema.registerSchema
3 (
4 :schemaURL,
5 xdbURIType(:schemaPath).getClob(),
6 TRUE,TRUE,FALSE,TRUE
7 );
8 end;
9 /
PL/SQL procedure successfully completed.
SQL> begin
2 :schemaURL := 'http://aahmb10-147:7575/public/www.mdanderson.org/schema/APEP/courseCatalog.xsd';
3 :schemaPath := '/public/courseCatalog.xsd';
4 end;
5 /
PL/SQL procedure successfully completed.
SQL> call dbms_xmlSchema.deleteSchema(:schemaURL,4)
2 /
Call completed.
SQL> declare
2 res boolean;
3 xmlSchema xmlType := xmlType(
4 '<?xml version="1.0" encoding="UTF-8"?>
5 <!-- edited with XMLSpy v2006 rel. 3 U (http://www.altova.com) by John Grossman (UT MD Anderson Cancer Center)
6 -->
7 <xs:schema xmlns:xdb="http://xmlns.oracle.com/xdb" xmlns="http://www.mdanderson.org/schema/APEP/courseCatalog" xmlns:xs="http://www.w3.
org/2001/XMLSchema" xmlns:ns1="http://www.mdanderson.org/schema/APEP/custom" targetNamespace="http://www.mdanderson.org/schema/APEP/courseCa
talog" elementFormDefault="qualified" attributeFormDefault="unqualified" xdb:storeVarrayAsTable="true">
8 <xs:import namespace="http://www.mdanderson.org/schema/APEP/custom" schemaLocation="http://aahmb10-147:7575/public/www.mdanderson.or
g/schema/APEP/custom.xsd"/>
9 <!-- ######################################## -->
10 <!-- GLOBAL ELEMENTS -->
11 <!-- ######################################## -->
12 <xs:element name="course" type="CourseType" xdb:defaultTable="COURSE">
13 <xs:annotation>
14 <xs:documentation>Comment describing your root element</xs:documentation>
15 </xs:annotation>
16 </xs:element>
17 <xs:element name="listOfCourse" type="ListOfCourseType" xdb:defaultTable="COURSELIST"/>
18 <xs:element name="courseCatalog" type="CourseCatalogType" xdb:defaultTable="COURSECATALOG"/>
19 <!-- ######################################## -->
20 <!-- GLOBAL TYPES -->
21 <!-- ######################################## -->
22 <xs:complexType name="CompositeIDType" xdb:SQLType="COURSE_COMPOSITEID_T">
23 <xs:sequence>
24 <xs:element name="prefix" xdb:SQLName="PREFIX">
25 <xs:simpleType>
26 <xs:restriction base="xs:string">
27 <xs:length value="2"/>
28 </xs:restriction>
29 </xs:simpleType>
30 </xs:element>
31 <xs:element name="level" type="xs:positiveInteger" xdb:SQLName="COURSELEVEL"/>
32 <xs:element name="creditHours" type="xs:positiveInteger" xdb:SQLName="CREDITHOURS"/>
33 <xs:element name="identNumber" xdb:SQLName="IDENTNUMBER">
34 <xs:simpleType>
35 <xs:restriction base="xs:string">
36 <xs:length value="2"/>
37 </xs:restriction>
38 </xs:simpleType>
39 </xs:element>
40 </xs:sequence>
41 </xs:complexType>
42 <xs:complexType name="CourseType" xdb:SQLType="COURSE_T">
43 <xs:sequence>
44 <xs:element name="id" type="xs:integer" minOccurs="0" xdb:SQLName="ID"/>
45 <xs:element name="compositeID" type="CompositeIDType" minOccurs="0" xdb:SQLName="COMPOSITEID"/>
46 <xs:element name="title" type="xs:string" minOccurs="0" xdb:SQLName="TITLE"/>
47 <xs:element name="description" type="xs:string" minOccurs="0" xdb:SQLName="DESCRIPTION"/>
48 <xs:element name="corequisite" type="CompositeIDType" minOccurs="0" maxOccurs="unbounded" xdb:SQLName="COREQUISITE"
xdb:defaultTable=""/>
49 <xs:element name="prerequisite" type="CompositeIDType" minOccurs="0" maxOccurs="unbounded" xdb:SQLName="PREREQUISITE
" xdb:defaultTable=""/>
50 <xs:element name="availability" minOccurs="0" xdb:SQLName="AVAILABILITY">
51 <xs:complexType>
52 <xs:sequence>
53 <xs:element name="startDate" type="xs:date" minOccurs="0" xdb:SQLName="STARTDATE"/>
54 <xs:element name="endDate" type="xs:date" minOccurs="0" xdb:SQLName="ENDDATE"/>
55 </xs:sequence>
56 </xs:complexType>
57 </xs:element>
58 </xs:sequence>
59 </xs:complexType>
60 <xs:complexType name="ListOfCourseType" xdb:SQLType="COURSE_LIST_T">
61 <xs:sequence minOccurs="0" maxOccurs="unbounded">
62 <xs:element name="id" type="xs:positiveInteger" minOccurs="0" xdb:SQLName="ID"/>
63 <xs:element ref="course" minOccurs="0"/>
64 </xs:sequence>
65 </xs:complexType>
66 <xs:complexType name="CourseCatalogType" xdb:SQLType="COURSE_CATALOG_T">
67 <xs:sequence minOccurs="0">
68 <xs:element name="id" type="xs:positiveInteger" minOccurs="0" xdb:SQLName="ID"/>
69 <xs:element ref="listOfCourse" minOccurs="0"/>
70 </xs:sequence>
71 </xs:complexType>
72 </xs:schema>');
73 begin
74 if (dbms_xdb.existsResource(:schemaPath)) then
75 dbms_xdb.deleteResource(:schemaPath);
76 end if;
77 res := dbms_xdb.createResource(:schemaPath,xmlSchema);
78 end;
79 /
PL/SQL procedure successfully completed.
SQL> begin
2 dbms_xmlschema.registerSchema
3 (
4 :schemaURL,
5 xdbURIType(:schemaPath).getClob(),
6 TRUE,TRUE,FALSE,TRUE
7 );
8 end;
9 /
PL/SQL procedure successfully completed.
SQL> begin
2 :schemaURL := 'http://aahmb10-147:7575/public/www.mdanderson.org/schema/APEP/academicProgram.xsd';
3 :schemaPath := '/public/academicProgram.xsd';
4 end;
5 /
PL/SQL procedure successfully completed.
SQL> call dbms_xmlSchema.deleteSchema(:schemaURL,4)
2 /
Call completed.
SQL> declare
2 res boolean;
3 xmlSchema xmlType := xmlType(
4 '<?xml version="1.0" encoding="WINDOWS-1252"?>
5 <!-- edited with XMLSpy v2006 rel. 3 U (http://www.altova.com) by John Grossman (UT MD Anderson Cancer Center) -->
6 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xdb="http://xmlns.oracle.com/xdb" xmlns:ap="http://www.mdanderson.org/sche
ma/APEP/courseCatalog" targetNamespace="http://www.mdanderson.org/schema/APEP/courseCatalog" elementFormDefault="qualified" attributeFormDef
ault="unqualified" xdb:storeVarrayAsTable="true">
7 <xs:include schemaLocation="http://aahmb10-147:7575/public/www.mdanderson.org/schema/APEP/courseCatalog.xsd" />
8 <!-- ######################################## -->
9 <!-- GLOBAL ELEMENTS -->
10 <!-- ######################################## -->
11 <xs:element name="academicProgram" type="ap:AcademicProgramType" xdb:defaultTable="ACADEMICPROGRAM">
12 <xs:annotation>
13 <xs:documentation>Comment describing your root element</xs:documentation>
14 </xs:annotation>
15 </xs:element>
16 <!-- ######################################## -->
17 <!-- GLOBAL Types -->
18 <!-- ######################################## -->
19 <xs:complexType name="ListOfAcademicCredentialType" xdb:SQLType="ACADEMICCREDENTIAL_LIST_T">
20 <xs:sequence minOccurs="0" maxOccurs="unbounded">
21 <xs:element name="credential" type="ap:AcademicCredentialType" minOccurs="0" xdb:SQLName="CREDENTIAL"/>
22 </xs:sequence>
23 </xs:complexType>
24 <xs:complexType name="AcademicCredentialType" xdb:SQLType="ACADEMICCREDENTIAL_T">
25 <xs:sequence minOccurs="0">
26 <xs:element name="id" type="xs:integer" minOccurs="0" xdb:SQLName="ID"/>
27 <xs:element name="field" type="xs:string" minOccurs="0" xdb:SQLName="FIELD">
28 <xs:annotation>
29 <xs:documentation>Academic or professional field for which the credential is granted. Example: Clini
ical Laboratory Science</xs:documentation>
30 </xs:annotation>
31 </xs:element>
32 <xs:element name="typeCode" minOccurs="0" xdb:SQLName="TYPECODE">
33 <xs:annotation>
34 <xs:documentation>The type of credential. Example: Bachelor of Science</xs:documentation>
35 </xs:annotation>
36 <xs:simpleType>
37 <xs:restriction base="xs:string">
38 <xs:enumeration value="Bachelor of Science Degree"/>
39 <xs:enumeration value="Certificate"/>
40 </xs:restriction>
41 </xs:simpleType>
42 </xs:element>
43 </xs:sequence>
44 </xs:complexType>
45 <xs:complexType name="RequirementType" xdb:SQLType="ACADEMICPROGRAM_REQ_T">
46 <xs:sequence minOccurs="0">
47 <xs:element name="typeCode" type="xs:string" minOccurs="0" xdb:SQLName="TYPECODE"/>
48 <xs:element name="description" type="xs:string" minOccurs="0" xdb:SQLName="DESCRIPTION"/>
49 <xs:element name="scope" type="xs:string" minOccurs="0" xdb:SQLName="SCOPE"/>
50 </xs:sequence>
51 </xs:complexType>
52 <xs:complexType name="ListOfRequirementType" xdb:SQLType="ACADEMICPROGRAM_REQ_L_T">
53 <xs:sequence minOccurs="0">
54 <xs:element name="requirement" type="ap:RequirementType" minOccurs="0" xdb:SQLName="REQUIREMENT"/>
55 </xs:sequence>
56 </xs:complexType>
57 <xs:complexType name="AcademicProgramType" xdb:SQLType="ACADEMICPROGRAM_T">
58 <xs:sequence>
59 <xs:element name="name" type="xs:string" minOccurs="0" xdb:SQLName="NAME"/>
60 <xs:element name="description" type="xs:string" minOccurs="0" xdb:SQLName="DESCRIPTION"/>
61 <xs:element name="listOfAcademicCredential" type="ap:ListOfAcademicCredentialType" minOccurs="0"/>
62 <xs:element name="listOfRelatedParty" minOccurs="0" xdb:SQLName="LISTOFRELATEDPARTY"/>
63 <xs:element name="mission" type="xs:string" minOccurs="0" xdb:SQLName="MISSION"/>
64 <xs:element name="goals" type="xs:string" minOccurs="0" xdb:SQLName="GOAL"/>
65 <xs:element name="objectives" type="xs:string" minOccurs="0" xdb:SQLName="OBJECTIVES"/>
66 <xs:element name="competencies" minOccurs="0" xdb:SQLName="COMPETENCIES"/>
67 <xs:element name="selectionProcess" minOccurs="0" xdb:SQLName="SELECTIONPROCESS"/>
68 <xs:element name="listOfRequirement" type="ap:ListOfRequirementType" minOccurs="0"/>
69 <xs:element name="evaluationCriteria" minOccurs="0" xdb:SQLName="EVALUATIONCRITERIA"/>
70 <xs:element name="postBaccDegreeInfo" minOccurs="0" xdb:SQLName="POSTBACCDEGREEINFO"/>
71 <xs:element name="postBaccCertificateInfo" minOccurs="0" xdb:SQLName="POSTBACCCERTIFICATEINFO"/>
72 <xs:element name="advancedPlacement" minOccurs="0" xdb:SQLName="ADVANCEDPLACEMENT"/>
73 <xs:element name="graduation" minOccurs="0" xdb:SQLName="GRADUATION"/>
74 <xs:element name="curriculum" minOccurs="0" xdb:SQLName="CURRICULUM"/>
75 <xs:element name="listOfCourse" type="ap:ListOfCourseType" minOccurs="0" xdb:SQLName="LISTOFCOURSE"/>
76 </xs:sequence>
77 </xs:complexType>
78 </xs:schema>
79 ');
80 begin
81 if (dbms_xdb.existsResource(:schemaPath)) then
82 dbms_xdb.deleteResource(:schemaPath);
83 end if;
84 res := dbms_xdb.createResource(:schemaPath,xmlSchema);
85 end;
86 /
PL/SQL procedure successfully completed.
SQL> begin
2 dbms_xmlschema.registerSchema
3 (
4 :schemaURL,
5 xdbURIType(:schemaPath).getClob(),
6 TRUE,TRUE,FALSE,TRUE
7 );
8 end;
9 /
PL/SQL procedure successfully completed.
SQL> insert into COURSE values ( xmltype(
2 '<?xml version="1.0" encoding="WINDOWS-1252"?>
3 <?altova_sps http://aahmb10-147:7575/public/www.mdanderson.org/template/APEP/courseInput.sps?>
4 <course xmlns="http://www.mdanderson.org/schema/APEP/courseCatalog" xmlns:ns1="http://www.mdanderson.org/schema/APEP/custom" xmlns:xdb=
"http://xmlns.oracle.com/xdb" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mdanderson.org/schema/APE
P/courseCatalog http://aahmb10-147:7575/public/www.mdanderson.org/schema/APEP/courseCatalog.xsd">
5 <id>53</id>
6 <compositeID>
7 <prefix>CL</prefix>
8 <level>4</level>
9 <creditHours>1</creditHours>
10 <identNumber>05</identNumber>
11 </compositeID>
12 <title>Urinalysis </title>
13 <description>A review of the anatomy and physiology of the kidney and the formation, elimination, and composition of urine and body flu
ids. Interpretation of urinary elements, chemical assays, and the correlation with normal and abnormal physiology.</description>
14 </course>'))
15 /
1 row created.
Execution Plan
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | INSERT STATEMENT | | 1 | 100 | 1 (0)| 00:00:01 |
SQL> insert into COURSE values ( xmltype(
2 '<?xml version="1.0" encoding="WINDOWS-1252"?>
3 <?altova_sps http://aahmb10-147:7575/public/www.mdanderson.org/template/APEP/courseInput.sps?>
4 <course xmlns="http://www.mdanderson.org/schema/APEP/courseCatalog" xmlns:ns1="http://www.mdanderson.org/schema/APEP/custom" xmlns:xdb=
"http://xmlns.oracle.com/xdb" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mdanderson.org/schema/APE
P/courseCatalog http://aahmb10-147:7575/public/www.mdanderson.org/schema/APEP/courseCatalog.xsd">
5 <id>54</id>
6 <compositeID>
7 <prefix>CL</prefix>
8 <level>4</level>
9 <creditHours>1</creditHours>
10 <identNumber>05</identNumber>
11 </compositeID>
12 <title>Course 54</title>
13 <description>A review of the anatomy and physiology of the kidney and the formation, elimination, and composition of urine and body flu
ids. Interpretation of urinary elements, chemical assays, and the correlation with normal and abnormal physiology.</description>
14 </course>'))
15 /
1 row created.
Execution Plan
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | INSERT STATEMENT | | 1 | 100 | 1 (0)| 00:00:01 |
SQL> insert into COURSE values ( xmltype(
2 '<?xml version="1.0" encoding="WINDOWS-1252"?>
3 <?altova_sps http://aahmb10-147:7575/public/www.mdanderson.org/template/APEP/courseInput.sps?>
4 <course xmlns="http://www.mdanderson.org/schema/APEP/courseCatalog" xmlns:ns1="http://www.mdanderson.org/schema/APEP/custom" xmlns:xdb=
"http://xmlns.oracle.com/xdb" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mdanderson.org/schema/APE
P/courseCatalog http://aahmb10-147:7575/public/www.mdanderson.org/schema/APEP/courseCatalog.xsd">
5 <id>55</id>
6 <compositeID>
7 <prefix>CL</prefix>
8 <level>4</level>
9 <creditHours>1</creditHours>
10 <identNumber>05</identNumber>
11 </compositeID>
12 <title>Course 55</title>
13 <description>A review of the anatomy and physiology of the kidney and the formation, elimination, and composition of urine and body flu
ids. Interpretation of urinary elements, chemical assays, and the correlation with normal and abnormal physiology.</description>
14 </course>'))
15 /
1 row created.
Execution Plan
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | INSERT STATEMENT | | 1 | 100 | 1 (0)| 00:00:01 |
SQL> insert into ACADEMICPROGRAM values ( xmltype (
2 '<?xml version="1.0" encoding="WINDOWS-1252"?>
3 <!--Sample XML file generated by XMLSpy v2006 rel. 3 U (http://www.altova.com)-->
4 <academicProgram xmlns="http://www.mdanderson.org/schema/APEP/courseCatalog" xmlns:ns1="http://www.mdanderson.org/schema/APEP/custom" x
mlns:xdb="http://xmlns.oracle.com/xdb" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mdanderson.org/s
chema/APEP/courseCatalog http://aahmb10-147:7575/public/www.mdanderson.org/schema/APEP/academicProgram.xsd">
5 <name>Clinical Laboratory Science</name>
6 <description>The clinical laboratory scientist is an essential member of the health care team, performing a myriad of laboratory proc
edures aimed at the diagnosis and treatment of disease.</description>
7 <listOfAcademicCredential>
8 <credential>
9 <id>0</id>
10 <field>String</field>
11 <typeCode>Bachelor of Science Degree</typeCode>
12 </credential>
13 <credential>
14 <id>0</id>
15 <field>String</field>
16 <typeCode>Bachelor of Science Degree</typeCode>
17 </credential>
18 <credential>
19 <id>0</id>
20 <field>String</field>
21 <typeCode>Bachelor of Science Degree</typeCode>
22 </credential>
23 </listOfAcademicCredential>
24 <listOfRelatedParty xmlns="http://www.mdanderson.org/schema/APEP/courseCatalog"/>
25 <mission>String</mission>
26 <goals>String</goals>
27 <objectives>String</objectives>
28 <competencies xmlns="http://www.mdanderson.org/schema/APEP/courseCatalog"/>
29 <selectionProcess xmlns="http://www.mdanderson.org/schema/APEP/courseCatalog"/>
30 <listOfRequirement>
31 <requirement>
32 <typeCode>String</typeCode>
33 <description>String</description>
34 <scope>String</scope>
35 </requirement>
36 </listOfRequirement>
37 <evaluationCriteria xmlns="http://www.mdanderson.org/schema/APEP/courseCatalog"/>
38 <postBaccDegreeInfo xmlns="http://www.mdanderson.org/schema/APEP/courseCatalog"/>
39 <postBaccCertificateInfo xmlns="http://www.mdanderson.org/schema/APEP/courseCatalog"/>
40 <advancedPlacement xmlns="http://www.mdanderson.org/schema/APEP/courseCatalog"/>
41 <graduation xmlns="http://www.mdanderson.org/schema/APEP/courseCatalog"/>
42 <curriculum xmlns="http://www.mdanderson.org/schema/APEP/courseCatalog"/>
43 <listOfCourse>
44 <id>53</id>
45 <course>
46 <id>53</id>
47 <compositeID>
48 <prefix>CL</prefix>
49 <level>4</level>
50 <creditHours>1</creditHours>
51 <identNumber>05</identNumber>
52 </compositeID>
53 <title>Biochemistry</title>
54 <description>this is a test for the course biochemistry</description>
55 </course>
56 <course>
57 <id>55</id>
58 <compositeID>
59 <prefix>CL</prefix>
60 <level>4</level>
61 <creditHours>1</creditHours>
62 <identNumber>05</identNumber>
63 </compositeID>
64 <title>Something Else</title>
65 <description>this is a test for the course biochemistry</description>
66 </course>
67 </listOfCourse>
68 </academicProgram>'))
69 /
1 row created.
Execution Plan
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | INSERT STATEMENT | | 1 | 100 | 1 (0)| 00:00:01 |
SQL> select extractValue(value(c),'/course/id')
2 from ACADEMICPROGRAM ap,
3 table (xmlsequence(extract(value(ap),'/academicProgram/listOfCourse/course','xmlns="http://www.mdanderson.org/schema/APEP/courseCatalo
g"'))) c
4 /
53
55
Execution Plan
Plan hash value: 3351541143
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 2 | 126 | 804 (0)| 00:00:10 |
| 1 | NESTED LOOPS | | 2 | 126 | 804 (0)| 00:00:10 |
|* 2 | INDEX FAST FULL SCAN | SYS_IOT_TOP_177341 | 2 | 66 | 802 (0)| 00:00:10 |
|* 3 | TABLE ACCESS BY INDEX ROWID| ACADEMICPROGRAM | 1 | 30 | 1 (0)| 00:00:01 |
|* 4 | INDEX UNIQUE SCAN | SYS_C0022632 | 1 | | 0 (0)| 00:00:01 |
Predicate Information (identified by operation id):
2 - filter("SYS_NC_TYPEID$" IS NOT NULL)
3 - filter(SYS_CHECKACL("ACLOID","OWNERID",xmltype('<privilege
xmlns="http://xmlns.oracle.com/xdb/acl.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-ins
tance" xsi:schemaLocation="http://xmlns.oracle.com/xdb/acl.xsd
http://xmlns.oracle.com/xdb/acl.xsd DAV:http://xmlns.oracle.com/xdb/dav.xsd"><read-properti
es/><read-contents/></privilege>'))=1)
4 - access("NESTED_TABLE_ID"="ACADEMICPROGRAM"."SYS_NC0004200043$")
Note
- dynamic sampling used for this statement
SQL> select updateXML
2 (
3 ap.object_value,
4 '/academicProgram/listOfCourse',
5 ( select xmlelement
6 (
7 "listOfCourse",
8 xmlattributes('http://www.mdanderson.org/schema/APEP/courseCatalog' as "xmlns"),
9 ( select xmlagg ( xmlconcat(extract(object_value,'/course/id'), extract(object_value,'/course')) )
10 from course c,
11 table (xmlsequence(extract(ap.object_value,'/academicProgram/listOfCourse/course','xmlns="http://www.mdanders
on.org/schema/APEP/courseCatalog"'))) api
12 where extractValue(c.object_value,'/course/id') = extractValue(value(api),'/course/id')
13 )
14 ) from dual
15 ),
16 'xmlns:="http://www.mdanderson.org/schema/APEP/courseCatalog"'
17 )
18 from ACADEMICPROGRAM ap
19 /
<?xml version="1.0" encoding="WINDOWS-1252"?>
<!--Sample XML file generated by XMLSpy v2006 rel. 3 U (http://www.altova.com)--><academicProgram xmlns="http://www.mdanderson.org/schema/AP
EP/courseC
atalog" xmlns:ns1="http://www.mdanderson.org/schema/APEP/custom" xmlns:xdb="http://xmlns.oracle.com/xdb" xmlns:xsi="http://www.w3.org/2001/X
MLSchema-i
nstance" xsi:schemaLocation="http://www.mdanderson.org/schema/APEP/courseCatalog http://aahmb10-147:7575/public/www.mdanderson.org/schema/AP
EP/academi
cProgram.xsd">
<name>Clinical Laboratory Science</name>
<description>The clinical laboratory scientist is an essential member of the health care team, performing a myriad of laboratory procedure
s aimed at
the diagnosis and treatment of disease.</description>
<listOfAcademicCredential>
<credential>
<id>0</id>
<field>String</field>
<typeCode>Bachelor of Science Degree</typeCode>
</credential>
<credential>
<id>0</id>
<field>String</field>
<typeCode>Bachelor of Science Degree</typeCode>
</credential>
<credential>
<id>0</id>
<field>String</field>
<typeCode>Bachelor of Science Degree</typeCode>
</credential>
</listOfAcademicCredential>
<listOfRelatedParty xmlns="http://www.mdanderson.org/schema/APEP/courseCatalog"/>
<mission>String</mission>
<goals>String</goals>
<objectives>String</objectives>
<competencies xmlns="http://www.mdanderson.org/schema/APEP/courseCatalog"/>
<selectionProcess xmlns="http://www.mdanderson.org/schema/APEP/courseCatalog"/>
<listOfRequirement>
<requirement>
<typeCode>String</typeCode>
<description>String</description>
<scope>String</scope>
</requirement>
</listOfRequirement>
<evaluationCriteria xmlns="http://www.mdanderson.org/schema/APEP/courseCatalog"/>
<postBaccDegreeInfo xmlns="http://www.mdanderson.org/schema/APEP/courseCatalog"/>
<postBaccCertificateInfo xmlns="http://www.mdanderson.org/schema/APEP/courseCatalog"/>
<advancedPlacement xmlns="http://www.mdanderson.org/schema/APEP/courseCatalog"/>
<graduation xmlns="http://www.mdanderson.org/schema/APEP/courseCatalog"/>
<curriculum xmlns="http://www.mdanderson.org/schema/APEP/courseCatalog"/>
<listOfCourse xmlns="http://www.mdanderson.org/schema/APEP/courseCatalog">
<id xmlns="http://www.mdanderson.org/schema/APEP/courseCatalog">53</id>
<course xmlns="http://www.mdanderson.org/schema/APEP/courseCatalog" xmlns:ns1="http://www.mdanderson.org/schema/APEP/custom" xmlns:xdb="
http://xml
ns.oracle.com/xdb" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mdanderson.org/schema/APEP/courseCat
alog http:
//aahmb10-147:7575/public/www.mdanderson.org/schema/APEP/courseCatalog.xsd">
<id>53</id>
<compositeID>
<prefix>CL</prefix>
<level>4</level>
<creditHours>1</creditHours>
<identNumber>05</identNumber>
</compositeID>
<title>Urinalysis </title>
<description>A review of the anatomy and physiology of the kidney and the formation, elimination, and composition of urine and body fl
uids. Inte
rpretation of urinary elements, chemical assays, and the correlation with normal and abnormal physiology.</description>
</course>
<id xmlns="http://www.mdanderson.org/schema/APEP/courseCatalog">55</id>
<course xmlns="http://www.mdanderson.org/schema/APEP/courseCatalog" xmlns:ns1="http://www.mdanderson.org/schema/APEP/custom" xmlns:xdb="
http://xml
ns.oracle.com/xdb" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mdanderson.org/schema/APEP/courseCat
alog http:
//aahmb10-147:7575/public/www.mdanderson.org/schema/APEP/courseCatalog.xsd">
<id>55</id>
<compositeID>
<prefix>CL</prefix>
<level>4</level>
<creditHours>1</creditHours>
<identNumber>05</identNumber>
</compositeID>
<title>Course 55</title>
<description>A review of the anatomy and physiology of the kidney and the formation, elimination, and composition of urine and body fl
uids. Inte
rpretation of urinary elements, chemical assays, and the correlation with normal and abnormal physiology.</description>
</course>
</listOfCourse>
</academicProgram>
Execution Plan
Plan hash value: 1698158615
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 1 | 47932 | 3 (0)| 00:00:01 |
| 1 | SORT AGGREGATE | | 1 | 13818 | | |
|* 2 | HASH JOIN | | 1 | 13818 | 5 (20)| 00:00:01 |
|* 3 | INDEX RANGE SCAN | SYS_IOT_TOP_177341 | 1 | 33 | 2 (0)| 00:00:01 |
|* 4 | TABLE ACCESS FULL| COURSE | 3 | 41355 | 3 (0)| 00:00:01 |
| 5 | FAST DUAL | | 1 | | 2 (0)| 00:00:01 |
|* 6 | TABLE ACCESS FULL | ACADEMICPROGRAM | 1 | 47932 | 3 (0)| 00:00:01 |
Predicate Information (identified by operation id):
2 - access("COURSE"."SYS_NC00009$"="ID")
3 - access("NESTED_TABLE_ID"=:B1)
filter("SYS_NC_TYPEID$" IS NOT NULL)
4 - filter(SYS_CHECKACL("ACLOID","OWNERID",xmltype('<privilege
xmlns="http://xmlns.oracle.com/xdb/acl.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.oracle.com/xdb/acl.xsd
http://xmlns.oracle.com/xdb/acl.xsd DAV:http://xmlns.oracle.com/xdb/dav.xsd"><read
-properties/><read-contents/></privilege>'))=1)
6 - filter(SYS_CHECKACL("ACLOID","OWNERID",xmltype('<privilege
xmlns="http://xmlns.oracle.com/xdb/acl.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.oracle.com/xdb/acl.xsd
http://xmlns.oracle.com/xdb/acl.xsd DAV:http://xmlns.oracle.com/xdb/dav.xsd"><read
-properties/><read-contents/></privilege>'))=1)
Note
- dynamic sampling used for this statement
SQL> -
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'); -
How to create index on xmltype column
I have a table having only one column xmlcontent (xmltype). This table stores xml data of about 10GB size. I'm using extract value to move the data to staging tables.
How can I create index on xmltype column?
Create index indexname on table (column) doesn't seem to work.
Sample xmlstructure is given below
<Root>
<Type>Insert</Type>
<Date>2006-12-29</Date>
<Source>8</Source>
<id>data</id>
<key_flds>
<fld><id>Key1</id><val>C</val></fld>
<fld><id>Key2</id><val>429672</val></fld>
<fld><id>Key3</id><val>8</val></fld>
</key_flds>
</Root>
I need to do extract value on all tags and move them to corresponding relational tables.Hi, you need to create them using something like this (what I have used and work rather well - if I did not load the xml into an xml table, the processing took about 10 minutes, while the indexed xml table took just a few seconds). statute_xml is the table name and sxmldoc is the xml column/field.
create index desc_idx on statute_xml
(sxmldoc.existsNode('/SimpleTypeCompanion/EnumerationValue/@description'))
create index sid_idx on statute_xml
(sxmldoc.existsNode
('/SimpleTypeCompanion/EnumerationValue/Text')
create index effdate_idx on statute_xml
(sxmldoc.existsNode
('/SimpleTypeCompanion/EnumerationValue/@effectiveDate')
Hope this helps.
Ben -
Hey,
My program collects 5 pieces of information per object from user. Some of the input data is in String format, rest are Integers. I create an object from this data and put in into a table. My table contains max 10 pieces of information.
I have editing options for this data, which are erase one or all pieces, or modify a piece. I erase data by simply setting the index to null. Erasing one piece is incomplete atm, here's why:
Say I have 5 pieces in table, and I erase the one with index of 0. I can't print my information because the table starts with a null value:
int index = 0;
if (table[index] != null) { System.out.println(data);} ..
My guess is that I can solve this problem by decreasing the index of pieces greater than the modified one by 1. I can imagine that I'll be using for loop here. This is where I run out of ideas: is it possible to just modify the index, or do I have to rewrite the data again?
Any help is appreciated,
br,
nomiI think using for loop would be the easiest way (?).
I'm filling the table as simply as:
items[index] = new table (value, quality..);Using LinkedList seems a bit far fetched for me. But
again, if I am to use for loop, I think I would have
to rewrite the data to appropriate index?Why is a List far fetched? Type of List you pick depends on how you use the list (whether you want RandomAccess, etc.).
List items = new ArrayList(); // or LinkedList
items.remove(index); // Remove the item at index.To use an array:
Table [] items = new Table[20]; // whatever size
items[index] = new Table(value, quality, ...);
// To remove:
System.arraycopy(items, index, items, index+1, items.length-(index+1));
items[items.length-1] = null; -
How to get selected row index of a Table ?
hi gurus,I'm new to Webdynpro for abap
I'm displaying just Flight details in a Table so
how to get selected row index of a Table and need to be display in Message manager.Hi,
For getting the row index use the following code.
DATA lo_nd_node TYPE REF TO if_wd_context_node.
DATA lo_el_node TYPE REF TO if_wd_context_element.
DATA index TYPE i.
* navigate from <CONTEXT> to <NODE> via lead selection
lo_nd_node = wd_context->get_child_node( name = wd_this->wdctx_node ).
lo_el_node = lo_nd_node->get_lead_selection( ).
index = lo_el_node->get_index( ).
node is the name of the node which is binded to the table.
For printing the message u can use code wizard.
Press ctrl-F7. Now Select generate message.
IN this select the method REPORT_SUCCESS
In the code now u can give index to Message text Exporting parameter. Comment receiving parameter.
Write the whole code in onLeadSelect of the table.
Regards,
Pankaj Aggarwal -
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 -
How much time it take to rebuild an index for a table with 20 millions rows
Hi all,
i need to rebuild the index of a table containing 20 000 000 row (i don't know why the other people working on this didn't think of rebuilding the index regularly, because i asked and apparently it has never been done :cry: :cry:) i am not a sql developper nor a DBA so i can't mesure how long it take to rebuild the index, does any one have an idea (aproximativly of course :aie:), the other question is there any formula to use in order to calculate how often to rebuild the indexes (i can for example retieve how much rows are delated or inserted daily ...)
Thanks again
Tahataha wrote:
:aie: that's why i am asking because i don't know (and to be sure which solution is best)
so the table is like this (the columns) :
45 varchar2, 5 timestamp, 30 Number no LOB columns, (15 indexes : 5 unique indexes and that those indexes uses at a maximum 4 columns)15 indexes - 100,000 deletes: this could mean 1,500,000 block visits to maintain index leaf blocks as the table rows are deleted. If you're unlucky this could turn into 1,500,000 physical block read requests; if you're lucky, or the system is well engineered this could be virtually no physical I/O. The difference in time could be huge. At any rate it is likely to be 1,500,000 redo entries at 250 - 300 bytes per entry for a total of about 400MB of redo (so how large are your redo logs and how many log switches are you going to cause).
yes the tables is used by an application so (update, insert ) can take place at any time
for the deletion , there is the batch which does a mass delete on the table ( 4 or 5 time each day)
You haven't answered the question - how long does it take to do a sample batch delete.
If you can enable SQL tracing, or take a before/after snapshot of v$sesstat or v$session_event for the session as it does the delete then you can get some idea of where the time is going - for all you know it might be spending most of its time waiting for a lock to do away.
>
"How many leaf blocks are currently allocated to the index(es) ?" how can i answer to this question ? may be if i check the all_objects table ?
If you keep your statistics up to date then dba_indexes is a good place, cross-checked with dba_segments, and you can use the dbms_space package for more detail. I have a code sample on my blog which allows you to compare the current size of your indexes with the size they would be if rebuilt at some specific percentage: http://jonathanlewis.wordpress.com/index-sizing/ (It's such good code that Oracle Corp. has copied it into MOS note 989186.1)
Regards
Jonathan Lewis -
How to get row index of data table in the while ValueChangeListener fired?
Hi,
i have a data table in my page, which contains various components like inputText, selectOneChoice in each row.
i am invoking a method ValueChangeListener attribute of the selectOneChoice component. I have given the autoSubmit=true for this component.
<tr:selectOneChoice id="ratingModelType"
value="#{childRatio.ratingModelType}" binding="#{pageManager.form.bindRatioType}"
valueChangeListener="#{pageManager.form.onRatingModelTypeChange}" autoSubmit="true"
contentStyle="width:150px" required="#{!childRatio.disableChildRatioRatingModelType}"
requiredMessageDetail="#{appBundle['error.ratingModelTypeShouldNotBeEmpty']}">
<f:selectItems value="#{pageManager.catalog['Rating Model Type']}" />
<tr:selectOneChoice>In that method i want to fetch the map(with all updated values) relevant to the currently modified row of the table.
Since i am not using the selectionListener or any radio buttons in the page i am not able to get the row index of the table.
somebody please tell me how to get the row index of the table, while ValueChangeListener fired?
Thanks in advance.
SubbuHi niki,
Thank you so much. With your suggestion i got the result exactly what i want.
thanks again.
--subbu -
How to add index to PSA table?
Hi , Experts
as title, I want to add index to PSA table.
my scenario is as below:
We have already initialized 2LIS_03_BF with NOT blcok business user(it's due to our company could not stop R/3 system, anyway), so there are 6 years data in the PSA table, it's very huge records in PSA more than 48 million records, because of we NOT stop R/3 business during initialization, so I have to search some common data between delta records and full records(it's due to this common data contain duplicate record, I need find them and delete the duplicate record and make sure the data is correct).
This is mean The selection is too expensive as it has to look for more than five thousand delta record between more than 48 million full records. fow now I have already tigger this search job use a program, but it's still run for 7 days, still not finished yet, it drive me crazy. so I mean if I can create a index for PSA table, and this action will drive the above compare work more quickly than before? or have any other way for my scenario?
Thanks in advance.
Best Regards,
BruceHi,
See the PSA Name in RSTSODS table and then in SE11 you can create Index. But the load will become slow if you don't drop the Index.
Use 2LIS_03_BX, 2LIS_03_BF, 2LIS_03_UM to 0IC_C03 Cube and design the report.
Use :See the steps how to load the data to 0IC_C03.
Treatment of historical full loads with Inventory cube
Setting up material movement/inventory with limit locking time
If it is BI 7 then for BX in in DTP in Extraction Tab you need to select Extacrion mode = NON-Cumulative option.
Thanks
Surendra Kumar Reddy Koduru -
How to find global index in partition table
Hi guys ,
need one help
How to find global index on partition table
How to find local index on partition table
Need query
Thanks in advance
Edited by: nav on Feb 17, 2012 6:51 AMnav wrote:
Hi Solomon,
so I have to identify partition & index are created or not,
also I have check the status of index ( both global and local)So what's the problem? Table/index partition is an object, so you can query DBA_OBJECTS:
SELECT SUBOBJECT_NAME,
CREATED
FROM DBA_OBJECTS
WHERE OWNER = partitioned-table-owner
AND OBJECT_NAME = partitioned-table-name
AND CREATED >= TRUNC(SYSDATE)
/This will give you partitions created today. So if you run this right after your job (I hope your job doen't run too close to midnight), you'll get table partition name your job created. Same logic can be applied to indexes.
SY.
Maybe you are looking for
-
I have an out of state Esxi 4.1 host that is working fine with 12 virtual servers on it. The problem is I cannot ping (IP or name) or connect to it using vSphere from my current location. The only machines which see the host are the VMs it is hosting
-
CHARM Landscape implications!!
Hi, i have setup CHARM and have D11(DEV) , D12(DEV2) , Q11(Q11) M11(maint) , P11(PRD) satellite systems added in SMSY and generated RFC's and created Logical components.now i created a maintenece project and wanna add these logical
-
Cant get music on to ipod. Help!!
I need urgent help with an Ipod. Only because my boyfriend is on the phone asking me how to set it up. He's downloaded all the crap he needs to download but he cant sync (or move or whatever you call it) the songs off his computer on to the ipod. htt
-
I have currently installed J2EE 1.3 but have problems starting it... Whent I type j2ee -verbose in the command prompt I receive the following message:- Out of environment space Out of environment space Syntax error Syntax error Syntax error Exception
-
I am trying to create a triangle with for loop. i wrote this codepublic class Test { public static void main(String[] args) { for(int x = 1; x <= 6; x++) { for(int y = 1; y <= (x*2-1); y++) { System.out.print("