How to create index on XMLType column extension?

I have an XMLType column named "info" whose corresponding global element has a complexType "InfoType" in namespace "http://example.org/ord". The "InfoType" complexType is extended in two namespaces, "http://example.org/info/zipcode" and "http://example.org/info/street". How do I create a unique index using an "InfoType" element contributed from one of the extension namespaces?
I have included below a SQL script that completely describes the problem.
Thanks in advance for your assistance?
- Ron
BEGIN
DBMS_XMLSCHEMA.registerSchema(
'chapter04prod.xsd',
'<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://example.org/prod"
targetNamespace="http://example.org/prod"
elementFormDefault="unqualified">
<xsd:complexType name="ItemsType">
<xsd:sequence>
<xsd:element name="product" type="ProductType"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="ProductType">
<xsd:sequence>
<xsd:element name="number" type="xsd:integer"/>
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="size" type="SizeType"/>
<xsd:element name="color" type="ColorType"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="SizeType">
<xsd:simpleContent>
<xsd:extension base="xsd:integer">
<xsd:attribute name="system" type="xsd:string"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
<xsd:complexType name="ColorType">
<xsd:attribute name="value" type="xsd:string"/>
</xsd:complexType>
</xsd:schema>',
TRUE,
TRUE,
FALSE,
FALSE);
END;
BEGIN
DBMS_XMLSCHEMA.registerSchema(
'chapter04ord1.xsd',
'<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://example.org/ord"
xmlns="http://example.org/ord"
xmlns:prod="http://example.org/prod"
elementFormDefault="qualified">
<xsd:import namespace="http://example.org/prod"
schemaLocation="chapter04prod.xsd"/>
<xsd:simpleType name="OrderNumType">
<xsd:restriction base="xsd:string"/>
</xsd:simpleType>
<xsd:complexType name="InfoType"/>
<xsd:complexType name="CustomerType">
<xsd:all>
<xsd:element name="name" type="CustNameType"/>
<xsd:element name="number" type="xsd:integer"/>
<xsd:element name="info" type="InfoType" form="unqualified"/>
</xsd:all>
</xsd:complexType>
<xsd:simpleType name="CustNameType">
<xsd:restriction base="xsd:string"/>
</xsd:simpleType>
<xsd:element name="order" type="OrderType"/>
<xsd:element name="customer" type="CustomerType"/>
<xsd:complexType name="OrderType">
<xsd:sequence>
<xsd:element name="number" type="OrderNumType"/>
<xsd:element name="customer" type="CustomerType"
maxOccurs="unbounded"/>
<xsd:element name="items" type="prod:ItemsType"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>',
TRUE,
TRUE,
FALSE,
FALSE);
END;
BEGIN
DBMS_XMLSCHEMA.registerSchema(
'chapter04infozipcode.xsd',
'<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:ord="http://example.org/ord"
xmlns="http://example.org/info/zipcode"
targetNamespace="http://example.org/info/zipcode"
elementFormDefault="unqualified">
<xsd:import namespace="http://example.org/ord"
schemaLocation="chapter04ord1.xsd"/>
<xsd:complexType name="InfoType">
<xsd:complexContent>
<xsd:extension base="ord:InfoType">
<xsd:sequence>
<xsd:element name="zipcode" type="xsd:string"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:schema>',
TRUE,
TRUE,
FALSE,
FALSE);
END;
BEGIN
DBMS_XMLSCHEMA.registerSchema(
'chapter04infostreet.xsd',
'<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:ord="http://example.org/ord"
xmlns="http://example.org/info/street"
targetNamespace="http://example.org/info/street"
elementFormDefault="unqualified">
<xsd:import namespace="http://example.org/ord"
schemaLocation="chapter04ord1.xsd"/>
<xsd:complexType name="InfoType">
<xsd:complexContent>
<xsd:extension base="ord:InfoType">
<xsd:sequence>
<xsd:element name="street" type="xsd:string"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:schema>',
TRUE,
TRUE,
FALSE,
FALSE);
END;
BEGIN
DBMS_XMLSCHEMA.registerSchema(
'chapter04nonamespace.xsd',
'<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:ord="http://example.org/ord">
<xsd:import namespace="http://example.org/ord"
schemaLocation="chapter04ord1.xsd"/>
<xsd:element name="info" type="ord:InfoType">
</xsd:schema>',
TRUE,
TRUE,
FALSE,
FALSE);
END;
CREATE TABLE customer (
name VARCHAR(64),
number INTEGER,
info XMLTYPE)
XMLType info STORE AS OBJECT RELATIONAL
XMLSCHEMA "chapter04nonamespace.xsd"
ELEMENT "info";
INSERT INTO customer (name, number, info)
VALUES ('George Jones', 1,
XMLType(
'<info xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:street="http://example.org/info/zipcode"
xsi:type="zipcode:InfoType">
<zipcode>28877</zipcode>
</info>');
INSERT INTO customer (name, number, info)
VALUES ('Jim Jones', 2,
XMLType(
'<info xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:street="http://example.org/info/street"
xsi:type="street:InfoType">
<street>3456 Autumn Lane</street>
</info>');
SELECT name,
extractValue(info, '/info/street')
FROM customer
WHERE extractValue(info, '/info/street/text()') LIKE '3456%';
-- How does one create a unique index as follows?
CREATE UNIQUE INDEX customer_infostreet ON customer (??????);
-- The following insert should fail with unique index violation!
INSERT INTO customer (name, number, info)
VALUES ('Jerry Jones', 3,
XMLType(
'<info xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:street="http://example.org/info/street"
xsi:type="street:InfoType">
<street>3456 Autumn Lane</street>
</info>');

Ron
Glad you found a solution.. However a more efficient solution is show below
SQL> connect sys/ as sysdba
Enter password:
Connected.
SQL> set define on
SQL> --
SQL> define USERNAME = OTNTEST
SQL> --
SQL> def PASSWORD = OTNTEST
SQL> --
SQL> def USER_TABLESPACE = USERS
SQL> --
SQL> def TEMP_TABLESPACE = TEMP
SQL> --
SQL> drop user &USERNAME cascade
  2  /
old   1: drop user &USERNAME cascade
new   1: drop user OTNTEST cascade
User dropped.
SQL> grant connect, resource to &USERNAME identified by &PASSWORD
  2  /
old   1: grant connect, resource to &USERNAME identified by &PASSWORD
new   1: grant connect, resource to OTNTEST identified by OTNTEST
Grant succeeded.
SQL> grant create any directory, drop any directory to &USERNAME
  2  /
old   1: grant create any directory, drop any directory to &USERNAME
new   1: grant create any directory, drop any directory to OTNTEST
Grant succeeded.
SQL> grant alter session, create view to &USERNAME
  2  /
old   1: grant alter session, create view to &USERNAME
new   1: grant alter session, create view to OTNTEST
Grant succeeded.
SQL> alter user &USERNAME default tablespace &USER_TABLESPACE temporary tablespace &TEMP_TABLESPACE
  2  /
old   1: alter user &USERNAME default tablespace &USER_TABLESPACE temporary tablespace &TEMP_TABLESPACE
new   1: alter user OTNTEST default tablespace USERS temporary tablespace TEMP
User altered.
SQL> connect &USERNAME/&PASSWORD
Connected.
SQL> --
SQL> alter session set events ='19027 trace name context forever, level 0x800'
  2  /
Session altered.
SQL> BEGIN
  2  DBMS_XMLSCHEMA.registerSchema(
  3  'chapter04prod.xsd',
  4  '<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://example.org/prod" targetNamespa
fault="unqualified">
  5     <xsd:complexType name="ItemsType">
  6             <xsd:sequence>
  7                     <xsd:element name="product" type="ProductType"/>
  8             </xsd:sequence>
  9     </xsd:complexType>
10     <xsd:complexType name="ProductType">
11             <xsd:sequence>
12                     <xsd:element name="num" type="xsd:integer"/>
13                     <xsd:element name="name" type="xsd:string"/>
14                     <xsd:element name="size" type="SizeType"/>
15                     <xsd:element name="color" type="ColorType"/>
16             </xsd:sequence>
17     </xsd:complexType>
18     <xsd:complexType name="SizeType">
19             <xsd:simpleContent>
20                     <xsd:extension base="xsd:integer">
21                             <xsd:attribute name="system" type="xsd:string"/>
22                     </xsd:extension>
23             </xsd:simpleContent>
24     </xsd:complexType>
25     <xsd:complexType name="ColorType">
26             <xsd:attribute name="value" type="xsd:string"/>
27     </xsd:complexType>
28  </xsd:schema>',
29  TRUE, TRUE, FALSE, FALSE);
30  END;
31  /
PL/SQL procedure successfully completed.
SQL> BEGIN
  2  DBMS_XMLSCHEMA.registerSchema(
  3  'chapter04ord1.xsd',
  4  '<xsd:schema xmlns:xdb="http://xmlns.oracle.com/xdb" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns
://example.org/prod" targetNamespace="http://example.org/ord" elementFormDefault="qualified">
  5     <xsd:import namespace="http://example.org/prod" schemaLocation="chapter04prod.xsd"/>
  6     <xsd:simpleType name="OrderNumType">
  7             <xsd:restriction base="xsd:string"/>
  8     </xsd:simpleType>
  9     <xsd:complexType name="InfoType" xdb:SQLType="INFO_TYPE_T"/>
10     <xsd:complexType name="CustomerType">
11             <xsd:all>
12                     <xsd:element name="name" type="CustNameType"/>
13                     <xsd:element name="num" type="xsd:integer"/>
14                     <xsd:element name="info" type="InfoType" minOccurs="1" form="unqualified"/>
15             </xsd:all>
16     </xsd:complexType>
17     <xsd:simpleType name="CustNameType">
18             <xsd:restriction base="xsd:string"/>
19     </xsd:simpleType>
20     <xsd:element name="customers" type="CustomersType"/>
21     <xsd:complexType name="CustomersType">
22             <xsd:sequence>
23                     <xsd:element name="customer" type="CustomerType" minOccurs="0" maxOccurs="unbounded"
24             </xsd:sequence>
25     </xsd:complexType>
26     <xsd:element name="order" type="OrderType"/>
27     <xsd:element name="customer" type="CustomerType"/>
28     <xsd:complexType name="OrderType">
29             <xsd:sequence>
30                     <xsd:element name="num" type="OrderNumType"/>
31                     <xsd:element name="customer" type="CustomerType" maxOccurs="unbounded"/>
32                     <xsd:element name="items" type="prod:ItemsType"/>
33             </xsd:sequence>
34     </xsd:complexType>
35  </xsd:schema>',
36  TRUE, TRUE, FALSE, FALSE);
37  END;
38  /
PL/SQL procedure successfully completed.
SQL> BEGIN
  2  DBMS_XMLSCHEMA.registerSchema(
  3  'chapter04infozipcode.xsd',
  4  '<xsd:schema xmlns:xdb="http://xmlns.oracle.com/xdb" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns
//example.org/info/zipcode" targetNamespace="http://example.org/info/zipcode" elementFormDefault="unqualifie
  5     <xsd:import namespace="http://example.org/ord" schemaLocation="chapter04ord1.xsd"/>
  6     <xsd:complexType name="InfoType" xdb:SQLType="ZIPCODE_INFO_TYPE_T">
  7             <xsd:complexContent>
  8                     <xsd:extension base="ord:InfoType">
  9                             <xsd:sequence>
10                                     <xsd:element name="zipcode" type="xsd:string"/>
11                                     <xsd:element name="suffix" type="xsd:string"/>
12                             </xsd:sequence>
13                     </xsd:extension>
14             </xsd:complexContent>
15     </xsd:complexType>
16  </xsd:schema>',
17  TRUE, TRUE, FALSE, FALSE);
18  END;
19  /
PL/SQL procedure successfully completed.
SQL>
SQL> BEGIN
  2  DBMS_XMLSCHEMA.registerSchema(
  3  'chapter04infostreet.xsd',
  4  '<xsd:schema xmlns:xdb="http://xmlns.oracle.com/xdb" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns
//example.org/info/street" targetNamespace="http://example.org/info/street" elementFormDefault="unqualified"
  5     <xsd:import namespace="http://example.org/ord" schemaLocation="chapter04ord1.xsd"/>
  6     <xsd:complexType name="InfoType" xdb:SQLType="STREET_INFO_TYPE_T">
  7             <xsd:complexContent>
  8                     <xsd:extension base="ord:InfoType">
  9                             <xsd:sequence>
10                                     <xsd:element name="street" type="xsd:string"/>
11                                     <xsd:element name="suffix" type="xsd:string"/>
12                             </xsd:sequence>
13                     </xsd:extension>
14             </xsd:complexContent>
15     </xsd:complexType>
16  </xsd:schema>',
17  TRUE, TRUE, FALSE, FALSE);
18  END;
19  /
PL/SQL procedure successfully completed.
SQL>
SQL> BEGIN
  2  DBMS_XMLSCHEMA.registerSchema(
  3  'chapter04nonamespace.xsd',
  4  '<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ord="http://example.org/ord">
  5     <xsd:import namespace="http://example.org/ord" schemaLocation="chapter04ord1.xsd"/>
  6     <xsd:element name="info" type="ord:InfoType"/>
  7  </xsd:schema>',
  8  TRUE, TRUE, FALSE, FALSE);
  9  END;
10  /
PL/SQL procedure successfully completed.
SQL>
SQL> CREATE TABLE customer (
  2  name VARCHAR(64),
  3  num INTEGER,
  4  info XMLTYPE)
  5  XMLType info STORE AS OBJECT RELATIONAL
  6  XMLSCHEMA "chapter04nonamespace.xsd"
  7  ELEMENT "info";
Table created.
SQL>
SQL> INSERT INTO customer (name, num, info)
  2  VALUES ('George Jones', 1,
  3  XMLType(
  4  '<info xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zipcode="http://example.org/info/zip
  5     <zipcode>28877</zipcode>
  6     <suffix>s1</suffix>
  7  </info>'));
1 row created.
SQL>
SQL> INSERT INTO customer (name, num, info)
  2  VALUES ('Jim Jones', 2,
  3  XMLType(
  4  '<info xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:street="http://example.org/info/stre
  5     <street>3456 Autumn Lane</street>
  6     <suffix>s2</suffix>
  7  </info>'));
1 row created.
SQL> /
1 row created.
SQL> SELECT name,
  2         extractValue(info, '/info/zipcode'),
  3         extractValue(info, '/info/street')
  4    FROM customer
  5  WHERE extractValue(info, '/info/zipcode/text()') LIKE '2%'
  6     OR extractValue(info, '/info/street/text()') LIKE '3456%';
NAME
EXTRACTVALUE(INFO,'/INFO/ZIPCODE')
EXTRACTVALUE(INFO,'/INFO/STREET')
George Jones
28877
Jim Jones
3456 Autumn Lane
NAME
EXTRACTVALUE(INFO,'/INFO/ZIPCODE')
EXTRACTVALUE(INFO,'/INFO/STREET')
Jim Jones
3456 Autumn Lane
SQL>
SQL> CREATE UNIQUE INDEX customer_infozipcode ON customer(
  2  extractValue
  3  (
  4    info,
  5    '/info[@xsi:type="zipcode:InfoType"]/zipcode',
  6    'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  7    xmlns:zipcode="http://example.org/info/zipcode"'
  8  ))
  9  /
Index created.
SQL> select column_name
  2    from user_ind_columns
  3   where INDEX_NAME = 'CUSTOMER_INFOZIPCODE'
  4  /
COLUMN_NAME
SYS_NC00014$
SQL> select INDEX_NAME,COLUMN_EXPRESSION
  2    from user_ind_expressions
  3  /
INDEX_NAME
COLUMN_EXPRESSION
CUSTOMER_INFOZIPCODE
EXTRACTVALUE(SYS_MAKEXML('0341F05603124922B4F6F94DC5E30C2F',4870,"SYS_NC00004$",
SQL> DROP INDEX CUSTOMER_INFOZIPCODE
  2  /
Index dropped.
SQL> desc INFO_TYPE_T
INFO_TYPE_T is NOT FINAL
Name                                      Null?    Type
SYS_XDBPD$                                         XDB.XDB$RAW_LIST_T
SQL> --
SQL> desc ZIPCODE_INFO_TYPE_T
ZIPCODE_INFO_TYPE_T extends OTNTEST.INFO_TYPE_T
ZIPCODE_INFO_TYPE_T is NOT FINAL
Name                                      Null?    Type
SYS_XDBPD$                                         XDB.XDB$RAW_LIST_T
zipcode                                            VARCHAR2(4000 CHAR)
suffix                                             VARCHAR2(4000 CHAR)
SQL> --
SQL> desc STREET_INFO_TYPE_T
STREET_INFO_TYPE_T extends OTNTEST.INFO_TYPE_T
STREET_INFO_TYPE_T is NOT FINAL
Name                                      Null?    Type
SYS_XDBPD$                                         XDB.XDB$RAW_LIST_T
street                                             VARCHAR2(4000 CHAR)
suffix                                             VARCHAR2(4000 CHAR)
SQL> --
SQL> CREATE UNIQUE INDEX customer_infozipcode ON customer(TREAT(INFO.XMLDATA AS ZIPCODE_INFO_TYPE_T)."zipcod
  2  /
Index created.
SQL> select column_name
  2    from user_ind_columns
  3   where INDEX_NAME = 'CUSTOMER_INFOZIPCODE'
  4  /
COLUMN_NAME
TREAT("SYS_NC00007$" AS "ZIPCODE_INFO_TYPE_T")."zipcode"
SQL> select INDEX_NAME,COLUMN_EXPRESSION
  2    from user_ind_expressions
  3  /
no rows selected
SQL> INSERT INTO customer (name, num, info)
  2  VALUES ('Jerry Jones', 3,
  3  XMLType(
  4  '<info xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:zipcode="http://example.org/info/zip
  5     <zipcode>28877</zipcode>
  6     <suffix>s1</suffix>
  7  </info>'))
  8  /
INSERT INTO customer (name, num, info)
ERROR at line 1:
ORA-00001: unique constraint (OTNTEST.CUSTOMER_INFOZIPCODE) violated
SQL> INSERT INTO customer (name, num, info)
  2  VALUES ('Jerry Jones', 3,
  3  XMLType(
  4  '<info xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:street="http://example.org/info/stre
  5     <street>3456 Autumn Lane</street>
  6     <suffix>s3</suffix>
  7  </info>'))
  8  /
1 row created.
SQL>In you solution a functional index was created. In my case, by breaking the XML abstraction, and using object-relational SQL to create the index (DDL statements are the one case where I feel this is acceptable) I was able to create a pure B-TREE index which has the same effect..

Similar Messages

  • 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

  • How to create  index for a column of a view

    Hi,
    I have created view for a table and then i am trying to create index for a column of that view. i am using the query "CREATE INDEX index_name ON view_name (col)". but Mysql is showing error like "view_name is not a base table".
    How can i do that......

    As mentioned this is a java forum not a mysql forum, but as I know the answer - you can't create an index directly on a view in mysql.

  • How to create index on XMLTYPE ordered collection table?

    I am using Oracle 11.2.0.2.
    Essentially, my XML documents have a 3-level hierarchy:
    event
      +---action  [1:n]
             +---- param   [1:n]
    I am trying to create indexes on ordered collection tables, but can not get the syntax right...
    I have created a table with an object-relational XMLType column:
    CREATE TABLE T_C_RMP_MNTRNG_XML_FULL_IL4 (
      MESSAGE_ID NUMBER(22,0) NOT NULL ENABLE,
      XML_EVAL_ID NUMBER(22,0),
      VIN7 VARCHAR2(7 BYTE),
      FLEET_ID VARCHAR2(50 BYTE),
      CSC_SW_VERSION VARCHAR2(100 BYTE),
      RECEIVED DATE,
      XML_CONTENT SYS.XMLTYPE ,
      DWH_LM_TS_UTC DATE NOT NULL ENABLE,
      CONSTRAINT PK_C_RMP_MNTRNG_XML_FULL_IL4 PRIMARY KEY (MESSAGE_ID)
    ) NOLOGGING TABLESPACE CATALOG
    VARRAY "XML_CONTENT"."XMLDATA"."action" STORE AS TABLE "T_OR_MON_ACTION" (
      NOLOGGING TABLESPACE "CATALOG"
      VARRAY "param" STORE AS TABLE "T_OR_MON_ACTION_PARAM" (
      NOLOGGING TABLESPACE "CATALOG"
      ) RETURN AS LOCATOR
    ) RETURN AS LOCATOR
    XMLTYPE XML_CONTENT STORE AS OBJECT RELATIONAL XMLSCHEMA "http://mydomain.com/cs.xsd" ELEMENT "monitoring";
    I am running the following SELECT:
    SELECT EVENT_ID, ACTION_SUB_ID, MESSAGE_ID, ACTION_TYPE, UNIXTS_TO_DATE(ACTION_TIMESTAMP) ACTION_TIMESTAMP
    FROM T_C_RMP_MNTRNG_XML_FULL_IL4,
    XMLTABLE(
      'for $i1 in /monitoring ,
      $i2 in $i1/action           
      return element r {             
      $i1/eventId,             
      $i2           
      PASSING XML_CONTENT COLUMNS
      EVENT_ID VARCHAR(40) PATH 'eventId',
      ACTION_SUB_ID INTEGER PATH 'action/actionSubId',
      ACTION_TYPE VARCHAR2(100) PATH 'action/type',
      ACTION_TIMESTAMP NUMBER(13,0) PATH 'action/time'
    ) T2
    WHERE (
      EVENT_ID IS NOT NULL AND ACTION_SUB_ID IS NOT NULL
    The explain plan looks like this (sorry, don't know how to get this formatted any "eye-friendlier"):
    | Id  | Operation          | Name                        | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
    |   0 | SELECT STATEMENT   |                             |  1609K|  6316M|       |  6110K  (1)| 20:22:11 |
    |*  1 |  HASH JOIN         |                             |  1609K|  6316M|   111M|  6110K  (1)| 20:22:11 |
    |   2 |   TABLE ACCESS FULL| T_C_RMP_MNTRNG_XML_FULL_IL4 |   582K|   104M|       |  5241   (1)| 00:01:03 |
    |*  3 |   TABLE ACCESS FULL| T_OR_MON_ACTION             |    32M|   117G|       |   105K  (2)| 00:21:08 |
    Predicate Information (identified by operation id):
       1 - access("NESTED_TABLE_ID"="T_C_RMP_MNTRNG_XML_FULL_IL4"."SYS_NC0001300014$")
           filter(CAST(SYS_XQ_UPKXML2SQL(SYS_XQEXVAL(SYS_XQEXTRACT(XMLCONCAT(SYS_XMLGEN("T_C_RMP_MNTRN
                  G_XML_FULL_IL4"."SYS_NC00017$",NULL,SYS_XMLCONV("T_C_RMP_MNTRNG_XML_FULL_IL4"."SYS_NC00012$",0,32,
                  'EC1EEF23FD023A27E04032A06D930A8D',3,3783,1)),SYS_MAKEXML('EC1EEF23FD023A27E04032A06D930A8D',3780,
                  "T_C_RMP_MNTRNG_XML_FULL_IL4"."SYS_NC00008$","SYS_ALIAS_0"."SYS_NC_ROWINFO$")),'/eventId',NULL),0,
                  0,20971520,0),50,1,2) AS VARCHAR(40) ) IS NOT NULL)
       3 - filter(CAST(TO_NUMBER(TO_CHAR("SYS_ALIAS_0"."actionSubId")) AS INTEGER ) IS NOT NULL)
    Note
       - dynamic sampling used for this statement (level=2)
       - Unoptimized XML construct detected (enable XMLOptimizationCheck for more information)
    The XML schema looks like this:
    <?xml version="1.0" encoding="UTF-8"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" xmlns:oraxdb="http://xmlns.oracle.com/xdb" oraxdb:storeVarrayAsTable="true" oraxdb:flags="2105639" oraxdb:schemaURL="http://mydomain.com/cs.xsd" oraxdb:schemaOwner="MYUSER" oraxdb:numProps="23">
      <xs:element name="monitoring" oraxdb:propNumber="3785" oraxdb:global="true" oraxdb:SQLName="monitoring" oraxdb:SQLType="monitoring755_T" oraxdb:SQLSchema="MYUSER" oraxdb:memType="258" oraxdb:defaultTable="monitoring757_TAB" oraxdb:defaultTableSchema="MYUSER">
        <xs:complexType oraxdb:SQLType="monitoring755_T" oraxdb:SQLSchema="MYUSER">
          <xs:sequence>
            <xs:element maxOccurs="unbounded" ref="action" oraxdb:propNumber="3780" oraxdb:global="false" oraxdb:SQLName="action" oraxdb:SQLType="action752_T" oraxdb:SQLSchema="MYUSER" oraxdb:memType="258" oraxdb:MemInline="false" oraxdb:SQLInline="true" oraxdb:JavaInline="false" oraxdb:SQLCollType="action756_COLL" oraxdb:SQLCollSchema="MYUSER"/>
            <xs:element ref="reservationType" oraxdb:propNumber="3781" oraxdb:global="false" oraxdb:SQLName="reservationType" oraxdb:SQLType="VARCHAR2" oraxdb:memType="1" oraxdb:MemInline="false" oraxdb:SQLInline="true" oraxdb:JavaInline="false"/>
            <xs:element ref="softwareVersion" oraxdb:propNumber="3782" oraxdb:global="false" oraxdb:SQLName="softwareVersion" oraxdb:SQLType="VARCHAR2" oraxdb:memType="1" oraxdb:MemInline="false" oraxdb:SQLInline="true" oraxdb:JavaInline="false"/>
            <xs:element ref="eventId" oraxdb:propNumber="3783" oraxdb:global="false" oraxdb:SQLName="eventId" oraxdb:SQLType="VARCHAR2" oraxdb:memType="1" oraxdb:MemInline="false" oraxdb:SQLInline="true" oraxdb:JavaInline="false"/>
            <xs:element ref="vin" oraxdb:propNumber="3784" oraxdb:global="false" oraxdb:SQLName="vin" oraxdb:SQLType="VARCHAR2" oraxdb:memType="1" oraxdb:MemInline="false" oraxdb:SQLInline="true" oraxdb:JavaInline="false"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="action" oraxdb:propNumber="3790" oraxdb:global="true" oraxdb:SQLName="action" oraxdb:SQLType="action752_T" oraxdb:SQLSchema="MYUSER" oraxdb:memType="258" oraxdb:defaultTable="action754_TAB" oraxdb:defaultTableSchema="MYUSER">
        <xs:complexType oraxdb:SQLType="action752_T" oraxdb:SQLSchema="MYUSER">
          <xs:sequence>
            <xs:element ref="type" oraxdb:propNumber="3786" oraxdb:global="false" oraxdb:SQLName="type" oraxdb:SQLType="VARCHAR2" oraxdb:memType="1" oraxdb:MemInline="false" oraxdb:SQLInline="true" oraxdb:JavaInline="false"/>
            <xs:element maxOccurs="unbounded" ref="param" oraxdb:propNumber="3787" oraxdb:global="false" oraxdb:SQLName="param" oraxdb:SQLType="param749_T" oraxdb:SQLSchema="MYUSER" oraxdb:memType="258" oraxdb:MemInline="false" oraxdb:SQLInline="true" oraxdb:JavaInline="false" oraxdb:SQLCollType="param753_COLL" oraxdb:SQLCollSchema="MYUSER"/>
            <xs:element ref="actionSubId" oraxdb:propNumber="3788" oraxdb:global="false" oraxdb:SQLName="actionSubId" oraxdb:SQLType="NUMBER" oraxdb:memType="2" oraxdb:MemInline="false" oraxdb:SQLInline="true" oraxdb:JavaInline="false"/>
            <xs:element ref="time" oraxdb:propNumber="3789" oraxdb:global="false" oraxdb:SQLName="time" oraxdb:SQLType="NUMBER" oraxdb:memType="2" oraxdb:MemInline="false" oraxdb:SQLInline="true" oraxdb:JavaInline="false"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="type" type="xs:string" oraxdb:propNumber="3791" oraxdb:global="true" oraxdb:SQLName="type" oraxdb:SQLType="VARCHAR2" oraxdb:memType="1" oraxdb:defaultTable="type751_TAB" oraxdb:defaultTableSchema="MYUSER"/>
      <xs:element name="param" oraxdb:propNumber="3794" oraxdb:global="true" oraxdb:SQLName="param" oraxdb:SQLType="param749_T" oraxdb:SQLSchema="MYUSER" oraxdb:memType="258" oraxdb:defaultTable="param750_TAB" oraxdb:defaultTableSchema="MYUSER">
        <xs:complexType oraxdb:SQLType="param749_T" oraxdb:SQLSchema="MYUSER">
          <xs:sequence>
            <xs:element minOccurs="0" ref="value" oraxdb:propNumber="3792" oraxdb:global="false" oraxdb:SQLName="value" oraxdb:SQLType="VARCHAR2" oraxdb:memType="1" oraxdb:MemInline="false" oraxdb:SQLInline="true" oraxdb:JavaInline="false"/>
            <xs:element ref="key" oraxdb:propNumber="3793" oraxdb:global="false" oraxdb:SQLName="key" oraxdb:SQLType="VARCHAR2" oraxdb:memType="1" oraxdb:MemInline="false" oraxdb:SQLInline="true" oraxdb:JavaInline="false"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="value" type="xs:string" oraxdb:propNumber="3795" oraxdb:global="true" oraxdb:SQLName="value" oraxdb:SQLType="VARCHAR2" oraxdb:memType="1" oraxdb:defaultTable="value748_TAB" oraxdb:defaultTableSchema="MYUSER"/>
      <xs:element name="key" type="xs:string" oraxdb:propNumber="3796" oraxdb:global="true" oraxdb:SQLName="key" oraxdb:SQLType="VARCHAR2" oraxdb:memType="1" oraxdb:defaultTable="key747_TAB" oraxdb:defaultTableSchema="MYUSER"/>
      <xs:element name="actionSubId" type="xs:integer" oraxdb:propNumber="3797" oraxdb:global="true" oraxdb:SQLName="actionSubId" oraxdb:SQLType="NUMBER" oraxdb:memType="2" oraxdb:defaultTable="actionSubId746_TAB" oraxdb:defaultTableSchema="MYUSER"/>
      <xs:element name="time" type="xs:integer" oraxdb:propNumber="3798" oraxdb:global="true" oraxdb:SQLName="time" oraxdb:SQLType="NUMBER" oraxdb:memType="2" oraxdb:defaultTable="time745_TAB" oraxdb:defaultTableSchema="MYUSER"/>
      <xs:element name="reservationType" type="xs:string" oraxdb:propNumber="3799" oraxdb:global="true" oraxdb:SQLName="reservationType" oraxdb:SQLType="VARCHAR2" oraxdb:memType="1" oraxdb:defaultTable="reservationType744_TAB" oraxdb:defaultTableSchema="MYUSER"/>
      <xs:element name="softwareVersion" type="xs:string" oraxdb:propNumber="3800" oraxdb:global="true" oraxdb:SQLName="softwareVersion" oraxdb:SQLType="VARCHAR2" oraxdb:memType="1" oraxdb:defaultTable="softwareVersion743_TAB" oraxdb:defaultTableSchema="MYUSER"/>
      <xs:element name="eventId" type="xs:string" oraxdb:propNumber="3801" oraxdb:global="true" oraxdb:SQLName="eventId" oraxdb:SQLType="VARCHAR2" oraxdb:memType="1" oraxdb:defaultTable="eventId742_TAB" oraxdb:defaultTableSchema="MYUSER"/>
      <xs:element name="vin" type="xs:string" oraxdb:propNumber="3802" oraxdb:global="true" oraxdb:SQLName="vin" oraxdb:SQLType="VARCHAR2" oraxdb:memType="1" oraxdb:defaultTable="vin741_TAB" oraxdb:defaultTableSchema="MYUSER"/>
    </xs:schema>
    How can I create an index on these ordered collection tables in order to improve performance?
    I found the example at http://docs.oracle.com/cd/E11882_01/appdev.112/e23094/xdb_rewrite.htm#ADXDB5859 but am not able to apply it to this particular case...
    Thank you in advance...

    If the schema is not annotated then xs:integer and xs:string are mapped to NUMBER and VARCHAR2(4000) datatypes, so you have to use those in your query in order to avoid unnecessary typecasting operations.
    You should also use chained XMLTABLEs when accessing a parent/child relationship instead of a FLWOR expression, otherwise the CBO may not rewrite the XQuery correctly (maybe it's fixed in the latest release).
    If you make those changes, the plan should show cleaner predicates :
    SQL> SELECT EVENT_ID, ACTION_SUB_ID, MESSAGE_ID, ACTION_TYPE, ACTION_TIMESTAMP
      2  FROM test_table,
      3  XMLTABLE('/monitoring'
      4    PASSING XML_CONTENT COLUMNS
      5      EVENT_ID         VARCHAR2(4000) PATH 'eventId',
      6      actions          XMLTYPE        PATH 'action'
      7    ) T1,
      8  XMLTABLE('/action'
      9    PASSING actions COLUMNS
    10      ACTION_SUB_ID    NUMBER PATH 'actionSubId',
    11      ACTION_TYPE      VARCHAR2(4000) PATH 'type',
    12      ACTION_TIMESTAMP NUMBER PATH 'time'
    13  ) T2
    14  WHERE EVENT_ID IS NOT NULL
    15  AND ACTION_SUB_ID IS NOT NULL
    16  ;
    Execution Plan
    Plan hash value: 1763884463
    | Id  | Operation                    | Name            | Rows  | Bytes | Cost (%CPU)| Time     |
    |   0 | SELECT STATEMENT             |                 |   109 |   220K|     6  (17)| 00:00:01 |
    |   1 |  MERGE JOIN                  |                 |   109 |   220K|     6  (17)| 00:00:01 |
    |*  2 |   TABLE ACCESS BY INDEX ROWID| TEST_TABLE      |    11 |   352 |     2   (0)| 00:00:01 |
    |   3 |    INDEX FULL SCAN           | SYS_C007567     |    11 |       |     1   (0)| 00:00:01 |
    |*  4 |   SORT JOIN                  |                 |   109 |   216K|     4  (25)| 00:00:01 |
    |*  5 |    TABLE ACCESS FULL         | T_OR_MON_ACTION |   109 |   216K|     3   (0)| 00:00:01 |
    Predicate Information (identified by operation id):
       2 - filter("TEST_TABLE"."SYS_NC00012$" IS NOT NULL)
       4 - access("SYS_ALIAS_0"."NESTED_TABLE_ID"="TEST_TABLE"."SYS_NC0000800009$")
           filter("SYS_ALIAS_0"."NESTED_TABLE_ID"="TEST_TABLE"."SYS_NC0000800009$")
       5 - filter("SYS_ALIAS_0"."actionSubId" IS NOT NULL)
    Note
       - dynamic sampling used for this statement (level=2)
    Now, if still necessary, it all boils down to choosing a technique to index NULL values :
    - composite index with a not null or constant column
    - FBI
    - bitmap
    Pick one that best fits your data, selectivity and activity on the tables.

  • How to create index on xmtype column

    Hi,
    I have a table as follows
    CREATE TABLE T_TEST_XML (PROCESS_ID NUMBER, TXT_XML XMLTYPE);
    I query the above table very frequently with the query
    SELECT * FROM T_TEST_XML TXS WHERE EXISTSNODE(TXS.TXT_XML, '/order[status="PEN"]') = 1
    How to create function based index on the TXT_XML column for the xpath expression /order[status="PEN"]' to improve the query performance?
    Thank you

    Actually if you are limited to using older software
    1. Consider defining an XML Schema and storing the XML using object relational storage.
    or
    2. If you must store the XML as CLOB create the index on extractValue(), rather than existsNode() and supply the predicate value at the SQL level rather than the XPATH level.
    SQL> DROP TABLE T_TEST_XML
      2  /
    Table dropped.
    SQL> CREATE TABLE T_TEST_XML (PROCESS_ID NUMBER, TXT_XML XMLTYPE)
      2  /
    Table created.
    SQL> create INDEX T_TEXT_XML_IDX on T_TEST_XML( extractValue(TXT_XML,'/order/status'))
      2  /
    Index created.
    SQL> set autotrace on explain
    SQL> --
    SQL> SELECT *
      2    FROM T_TEST_XML TXS
      3   WHERE ExistsNode(TXT_XML,'/order[status="PEN"]') = 1
      4  /
    no rows selected
    Execution Plan
    Plan hash value: 3001212210
    | Id  | Operation          | Name       | Rows  | Bytes | Cost (%CPU)| Time     |
    |   0 | SELECT STATEMENT   |            |     1 |  2017 |    31   (0)| 00:00:01 |
    |   1 |  NESTED LOOPS SEMI |            |     1 |  2017 |    31   (0)| 00:00:01 |
    |   2 |   TABLE ACCESS FULL| T_TEST_XML |     1 |  2015 |     2   (0)| 00:00:01 |
    |*  3 |   XPATH EVALUATION |            |       |       |            |          |
    Predicate Information (identified by operation id):
       3 - filter("P"."C_01$"='PEN')
    Note
       - dynamic sampling used for this statement (level=2)
    SQL> SELECT *
      2    FROM T_TEST_XML TXS
      3   WHERE extractValue(TXT_XML,'/order/status') = 'PEN'
      4  /
    no rows selected
    Execution Plan
    Plan hash value: 1430727070
    | Id  | Operation                   | Name           | Rows  | Bytes | Cost (%CPU)| Time     |
    |   0 | SELECT STATEMENT            |                |     1 |  2015 |     1   (0)| 00:00:01 |
    |   1 |  TABLE ACCESS BY INDEX ROWID| T_TEST_XML     |     1 |  2015 |     1   (0)| 00:00:01 |
    |*  2 |   INDEX RANGE SCAN          | T_TEXT_XML_IDX |     1 |       |     1   (0)| 00:00:01 |
    Predicate Information (identified by operation id):
       2 - access(EXTRACTVALUE(SYS_MAKEXML(0,"SYS_NC00003$"),'/order/status',null,0,0,5242
                  93,133120)='PEN')
    Note
       - dynamic sampling used for this statement (level=2)
    SQL>
    SQL>
    SQL>
    SQL>
    SQL>
    SQL>This allows the index to support querying on any value of status, rather than just PEN

  • ORA-01450 when trying to create index on xmltype column

    Hi,
    I have a table that contains an xmltype column. It is a schema-based column and uses object-relational structured storage. When I tried to create an index like:
    create index ssual_sipuser_idx on ssua_line (extractValue(ssual_configuration, '/ssuaLineApplication/sipUser'));
    I got the following:
    ORA-01450: maximum key length (3118) exceeded
    The sipUser tag is of string type. I have also tried creating the index on the extract function.
    create index ssual_sipuser_idx on ssua_line (ssual_configuration.extract('/ssuaLineApplication/sipUser/text()').getStringVal())
    Gave me the same error message. My database block size is 4k. This is Oracle 9.2.0.4 running on Solaris.
    Any help will be appreciated.
    Thanks,
    Gloria

    Thanks for the reply, Coby.
    My field is really small, probably around 10 bytes. Actually I've been testing on two servers, a 9201 and a 9204. I know that Oracle doesn't support XML DB on 9201 anymore but our company hasn't switched over yet. Anyways, here's really what I saw:
    9201
    - creating an index with extractValue() or extract() doesn't work
    9204
    - extractValue() works
    - extract() still doesn't work
    Now I'm using the substr() workaround. I should also mention that extractValue() with a numeric field works (using getNumberVal()).
    I wonder if specifying the field length in the XML Schema would make a difference. I may try that next.

  • How to create view for xmltype table in oracle

    hi:
    Can some one help me how to create view for xmltype table in oracle?
    XMLType do not have column
    Sem

    Thank you !!
    I read it and become very hard to implement what I want to do.
    Can you give me example please?
    My main goal to create view for xmltype table is to XQuery the XML data?
    Do you have any other suggestion?
    Please help
    Ali_2

  • How to create a view indicating column's length?

    SQL>create table abc (a number(12));
    I want to create a view cde with a length of number(5) by "describe cde" in sql*plus.
    SQL>create view cde(a) as select a from abc;
    SQL>desc cde
    A NUMBER(12)
    how to create a view indicating column's length? the actual value in abc only <1000
    I want to create a view cde with a length of number(5) .
    SQL>desc cde
    A NUMBER(12)
    Thank You
    Ming-An Zhang

    This does not make sense. How can a view be a NUMBER(5) and the actual column a NUMBER(12)?
    What happens if there is a 10 or 12 digit number in the table? Just what is the view suppose to do? Crash and burn? Where is the logic in that?!
    If the table's column has an incorrect precision and size, THEN FIX IT!! Do not hack it with view!
    It is silly purposefully building constructs into the database that can easily result in run-time errors.

  • How to create a fixed-width column within an APEX 4 interactive report?

    This thread is a follow-up to {message:id=9191195}. Thanks fac586.
    Partial success: The following code provided by fac586 limits the column width of the Apex 4 interactive report column as long as the column data contains whitespace within a Firefox 3.6 browser:
    <pre class="jive-pre">
    <style type="text/css">
    th#T_DESCRIPTION {
    width: 300px;
    td[headers="T_DESCRIPTION"] {
    width: 300px;
    word-wrap: break-word;
    </style>
    </pre>
    Notes:
    1. The code above is put into the HTML header section for the page.
    2. T_DESCRIPTION is defined as VARCHAR2(2000).
    3. The code above works within the Firefox 3.6.12 browser but does not work within the Internet Explorer 7.0.5730.13 browser.
    I tried adding "float: left;":
    <pre class="jive-pre">
    <style type="text/css">
    th#T_DESCRIPTION {
    width: 300px;
    td[headers="T_DESCRIPTION"] {
    width: 300px;
    word-wrap: break-word;
    <font color="red"> float: left;</font>
    </style>
    </pre>
    Notes:
    1. "float: left;" does not require whitespace and successfully splits the column between characters in lieu of whitespace.
    2. "float: left;" shrinks the cell height and allows the page background to show through... couldn't determine how to fix this.
    3. The code above works within the Firefox 3.6.12 browser but does not work within the Internet Explorer 7.0.5730.13 browser.
    I've done some more research, but I still haven't discovered how to create a fixed-width column within an APEX 4 interactive report that displays properly within an Internet Explorer 7 browser.
    Any ideas and help will be appreciated.

    Thanks for your help with this!
    <pre class="jive-pre">
    what theme are you using?
    </pre>
    A customized version of theme 15.
    <pre class="jive-pre">
    Floating a table cell makes no sense (to me anyway).
    </pre>
    You are correct. I was just trying a different approach ... trying to think out of the box.
    <pre class="jive-pre">
    Think you'll need to create an example on apex.oracle.com with sample data
    if there are any further problems.
    </pre>
    Great suggestion! The code your provided works in the Firefox 3.6.12 browser, but still doesn't work within my Internet Explorer 7.0.5730.13 browser.
    UPDATE:
    I have recreated the problem at apex.oracle.com, you can use the following information to check it out:
    URL: http://apex.oracle.com/pls/apex/f?p=43543:100::::::
    Workspace: IR_FIXED_WIDTH_COLS
    Username: GUEST
    Password: Thx4help
    Application: 43543 - CM_RANDY_SD
    Note: Table name is TEST_DATA
    The following code provided by fac586 works in both Firefox 3.6 and IE7 using default theme "21. Scarlet" at apex.oracle.com; however, it doesn't work when I use a copy of our customized theme "101. Light Blue":
    <pre class="jive-pre">
    <style type="text/css">
    .apexir_WORKSHEET_DATA {
    th#T_DESCRIPTION {
    width: 300px;
    max-width: 300px;
    td[headers="T_DESCRIPTION"] {
    max-width: 300px;
    word-wrap: break-word;
    </style>
    <!--[if lt IE 8]>
    <style type="text/css">
    /* IE is broken */
    th#T_DESCRIPTION,
    td[headers="T_DESCRIPTION"] {
    width: 300px;
    </style>
    <![endif]-->
    </pre>
    Any idea what in the theme could be causing the fixed width column to be ignored in IE 7?
    Edited by: CM Randy SD on Dec 7, 2010 11:22 AM

  • CREATE INDEX WITH DUPLICATE COLUMN NAME

    Hi,
    i need to interface our application with an Orale Bridge to CREATE INDEX with duplcate column Name.
    For Example
    CREATE index NLOT_FOURNLOT_idx ON NLOT(FOURNISSEUR ,NOLOT ,FOURNISSEUR ,NOBLFOUNISSEUR,NOLIGNEBL ,NOLOT ,QTECOLISRECUES ,CODENONQUALITE ,QTECOLISACCEPTE);
    CREATE table NLOT(
    FOURNISSEUR VARCHAR2(09)
    ,NOBLFOURNISSEUR VARCHAR2(13)
    ,NOLIGNEBL VARCHAR2(03)
    ,NOLOT VARCHAR2(20)
    ,QTECOLISRECUES VARCHAR2(10)
    ,CODENONQUALITE VARCHAR2(02)
    ,QTECOLISACCEPTE VARCHAR2(10)
    ,NOMBREDECOLISRE VARCHAR2(10)
    ,NOMBREDECOLISAC VARCHAR2(10)
    ,FILLER VARCHAR2(1)
    ,FILLE1 VARCHAR2(1)
    ,TYPEREFERENCE VARCHAR2(01)
    ,REFERENC1 VARCHAR2(15)
    ,CONTROLERECEPTI VARCHAR2(01)
    ,DATEDEPEREMPTIO VARCHAR2(8)
    ,CONTROLEPROCHAI VARCHAR2(1)
    Thanks
    Philippe

    Well, you can't do it. ORA-957 is one of those irrevocable errors for which the solution is to remove the duplicate name from the SQL statement.
    But, anyway, why do you want to do this? I would guess there's no performance benefit from having the same column indexed twice (of course it's impossible to test this, so it's just my opinion).
    Cheers, APC

  • How to create indexes on ODS ?

    Hello friends ,
    Need some help .
    Could any one please let me know how to create indexes on ODS ?
    How Indexes are useful on ODS ?
    Thanks in advance
    Regards

    Dear Akshay,
    Below is the information about indexes and there creation for ODS.
    You can search a table for data records that satisfy certain search criteria faster using an index.
    An index can be considered a copy of a database table that has been reduced to certain fields. This copy is always in sorted form. Sorting provides faster access to the data records of the table, for example using a binary search. The index also contains a pointer to the corresponding record of the actual table so that the fields not contained in the index can also be read.
    The primary index is distinguished from the secondary indexes of a table. The primary index contains the key fields of the table and a pointer to the non-key fields of the table. The primary index is created automatically when the table is created in the database.
    You can also create further indexes on a table in the ABAP Dictionary. These are called secondary indexes.Under Indexes, you can create secondary indexes by using the context menu in order to improve the load and query performance of the ODS object This is necessary if the table is frequently accessed in a way that does not take advantage of the sorting of the primary index for the access.
    The database system sometimes does not use a suitable index for a selection, even if there is one. The index used depends on the optimizer used for the database system. You should therefore check if the index you created is also used for the selection (see How to Check if an Index is Used).).
    Creating an additional index could also have side effects on the performance. This is because an index that was used successfully for selection might not be used any longer by the optimizer if the optimizer estimates (sometimes incorrectly) that the newly created index is more selective.
    The indexes on a table should therefore be as disjunct as possible, that is they should contain as few fields in common as possible. If two indexes on a table have a large number of common fields, this could make it more difficult for the optimizer to choose the most selective index.
    Leaving content frame.
    With Regards,
    Prafulla Singh

  • How to create indexes using CREATE TABLE statement

    Hi,
    Can anyone please tell me how to create indexes using CREATE TABLE staement? This point is part SQL Expert exam (1Z0-047) and please guide me to use which books for this particular exam.
    Thanks in advance.

    Can anyone please tell me how to create indexes using CREATE TABLE staement?e.g. creating a primary key or a unique constraint will generate indexes along with the create table syntax:
    SQL> create table t (a integer primary key, b integer unique)
    Table created.
    SQL> select   index_name, index_type, uniqueness
      from   user_indexes
    where   table_name = 'T'
    INDEX_NAME                     INDEX_TYPE                  UNIQUENES
    SYS_C0016575                   NORMAL                      UNIQUE  
    SYS_C0016574                   NORMAL                      UNIQUE  
    2 rows selected.

  • How to create index on a xmltype column stored as CLOB

    actually i have two problems.
    i uploaded this schemaA.xsd file into xmldb repository without problems. registration also went ok.
    BEGIN
    DBMS_XMLSCHEMA.registerSchema(
    schemaURL => 'http://xmlns.example.com/xdb/documentation/schemaA.xsd'
    ,schemaDoc => sys.UriFactory.getUri('/home/dev/schemaA.xsd')
    ,local => TRUE
    ,genBean => false
    ,genTypes => TRUE
    ,genTables => false
    ,enableHierarchy => DBMS_XMLSCHEMA.ENABLE_HIERARCHY_NONE
    END;
    then i run this:
    create table pf_table_a(
         id VARCHAR2(100) primary key,
         xsd VARCHAR2(3000),
    xml_document XMLType
    ) XMLTYPE COLUMN xml_document
    STORE AS CLOB
    XMLSCHEMA "http://xmlns.example.com/xdb/documentation/schemaA.xsd"
    ELEMENT "order";
    and got this error:
    SQL> @d:\usr\dev\perftest\create_tables.sql
    Table created.
    create table pf_table_a(
    ERROR at line 1:
    ORA-00955: name is already used by an existing object
    anyway the table was created. so i went on to create indexes.
    SQL> create index pf_a_index on pf_table_a(extractValue(OBJECT_VALUE, '/order@or
    derNo'));
    create index pf_a_index on pf_table_a(extractValue(OBJECT_VALUE, '/order@orderNo
    ERROR at line 1:
    ORA-04063: table "BAUSER1.PF_TABLE_A" has errors
    this of course is wrong. because the command is for creating index of a XMLTYPE table. no a column. but what is the correct command? thanks.
    jack.

    actually i have two problems.
    i uploaded this schemaA.xsd file into xmldb repository without problems. registration also went ok.
    BEGIN
    DBMS_XMLSCHEMA.registerSchema(
    schemaURL => 'http://xmlns.example.com/xdb/documentation/schemaA.xsd'
    ,schemaDoc => sys.UriFactory.getUri('/home/dev/schemaA.xsd')
    ,local => TRUE
    ,genBean => false
    ,genTypes => TRUE
    ,genTables => false
    ,enableHierarchy => DBMS_XMLSCHEMA.ENABLE_HIERARCHY_NONE
    END;
    then i run this:
    create table pf_table_a(
         id VARCHAR2(100) primary key,
         xsd VARCHAR2(3000),
    xml_document XMLType
    ) XMLTYPE COLUMN xml_document
    STORE AS CLOB
    XMLSCHEMA "http://xmlns.example.com/xdb/documentation/schemaA.xsd"
    ELEMENT "order";
    and got this error:
    SQL> @d:\usr\dev\perftest\create_tables.sql
    Table created.
    create table pf_table_a(
    ERROR at line 1:
    ORA-00955: name is already used by an existing object
    anyway the table was created. so i went on to create indexes.
    SQL> create index pf_a_index on pf_table_a(extractValue(OBJECT_VALUE, '/order@or
    derNo'));
    create index pf_a_index on pf_table_a(extractValue(OBJECT_VALUE, '/order@orderNo
    ERROR at line 1:
    ORA-04063: table "BAUSER1.PF_TABLE_A" has errors
    this of course is wrong. because the command is for creating index of a XMLTYPE table. no a column. but what is the correct command? thanks.
    jack.

  • How can i change a xmltype column's xml schema?

    i create a table that have a xmltype column.this column is schema-based.
    my problem is ,
    now i want to this column's schema will be redefined to a global schema?
    [b]how can i change the column's schema which already have a schema?

    When a schema is registered a lot of additonal annotations are added to the XML schema by the schema registration process - Look at the version of the XML schema under /sys/schemas/... in the XML DB repository. This information is unqiue to that version of the XML schema and is used internally to manage instance level metadata.
    When instance documents are stored in the DB a set of metadata is generated for each document so that we can make sure that we can maintain DOM Fidelity. This metadata is tied directly to the XML schema the document is associated and is only valid in the context of that XML Schema.
    So when the schema is registered locally and instances are stored the generated metadata is only valid in the context of the local schema. If the same schema is now registered globally new values will be generated for the annotations applied to the global version of the XML schema. Consequently the metadata associated with a document belonging to the local version of the XML schema has no meaning when viewed in the context of the global version of the XML schema.
    The net effect of this is that you will need to copy the data in order to get documents where the metadata for each document is based on the global version of the XML SChema.

  • How to create primary on a column when redundant data is present

    I am interested to add primary key constraint on a column where repeated data is there without affecting the date how can I immplement this.
    Can any one help me in this regard.
    Thanks
    Sanjay

    If you have duplicated data and going to specify the primary key constraint on that data it's quite against RDBMS concepts and can't be considered as a relevant idea. Nevertheless Oracle provides you with such tricky method, but once again, it's NOT good idea, change your mind:
    SQL> create table t (x int);
    Table created.
    SQL> insert into t values(1);
    1 row created.
    SQL> insert into t values(1);
    1 row created.
    SQL> commit;
    Commit complete.
    SQL> select * from t;
             X
             1
             1
    SQL> create index t_x on t(x);
    Index created.
    SQL> alter table t add primary key (x) novalidate;
    Table altered.
    SQL> insert into t values(1);
    insert into t values(1)
    ERROR at line 1:
    ORA-00001: unique constraint (ORACLE_OCM.SYS_C006647) violated
    SQL> insert into t values(2);
    1 row created.
    SQL> select * from t;
             X
             1
             1
             2In this case you have PK constraint and it affects all new DMLs, but
    in fact you can't rely on PK.
    Rgds.

Maybe you are looking for