How to create XML from relational tables based on an XML Schema ?

There is no automated way in Oracle XML DB to define an automatic mapping between a set of columns in some existing relational tables and the elements and attributres defined by an XML Schema.
However it is easy solve this problem by using the SQL/XML operators (XMLAGG, XMLELEMENT, XMLFOREST, XMLATTRIBUTES, etc) to generate XML documents that are compliant with an XML Schema directly from a SQL statement.
If the XML Schema is registered with Oracle XML DB and the appropraite Schema Location information is added into the generated document using XMLAttributes then it becomes very easy to ensure that the generated documents are valid.
The following example show an easy way to do this by creating an XML View that contains the documents to be validated.
SQL> drop table PURCHASEORDER_LINEITEM
  2  /
Table dropped.
SQL> drop table PURCHASEORDER_REJECTION
  2  /
Table dropped.
SQL> drop table PURCHASEORDER_SHIPPING
  2  /
Table dropped.
SQL> drop TABLE PURCHASEORDER_ACTION
  2  /
Table dropped.
SQL> drop TABLE PURCHASEORDER_TABLE
  2  /
Table dropped.
SQL> create table PURCHASEORDER_TABLE
  2  (
  3   REFERENCE                                          VARCHAR2(28),
  4   PRIMARY KEY ("REFERENCE"),
  5   REQUESTER                                          VARCHAR2(48),
  6   USERID                                             VARCHAR2(32),
  7   COSTCENTER                                         VARCHAR2(3),
  8   SPECIALINSTRUCTIONS                                VARCHAR2(2048)
  9  )
10  /
Table created.
SQL> create table PURCHASEORDER_ACTION
  2  (
  3   REFERENCE,
  4   FOREIGN KEY ("REFERENCE")                          REFERENCES "PURCHASEORDER_TABLE" ("REFERENCE") ON DELETE CASCADE,
  5   ACTIONEDBY                                         VARCHAR2(32),
  6   DATEACTIONED                                       DATE
  7  )
  8  /
Table created.
SQL> create table PURCHASEORDER_SHIPPING
  2  (
  3   REFERENCE,
  4   FOREIGN KEY ("REFERENCE")                          REFERENCES "PURCHASEORDER_TABLE" ("REFERENCE") ON DELETE CASCADE,
  5   PRIMARY KEY ("REFERENCE"),
  6   SHIPTONAME                                         VARCHAR2(48),
  7   ADDRESS                                            VARCHAR2(512),
  8   PHONE                                              VARCHAR2(32)
  9  )
10  /
Table created.
SQL> create table PURCHASEORDER_REJECTION
  2  (
  3   REFERENCE,
  4   FOREIGN KEY ("REFERENCE")                          REFERENCES "PURCHASEORDER_TABLE" ("REFERENCE") ON DELETE CASCADE,
  5   PRIMARY KEY ("REFERENCE"),
  6   REJECTEDBY                                         VARCHAR2(32),
  7   DATEREJECTED                                       DATE,
  8   COMMENTS                                           VARCHAR2(2048)
  9  )
10  /
Table created.
SQL> create table PURCHASEORDER_LINEITEM
  2  (
  3   REFERENCE,
  4   FOREIGN KEY ("REFERENCE")                          REFERENCES "PURCHASEORDER_TABLE" ("REFERENCE") ON DELETE CASCADE,
  5   LINENO                                             NUMBER(10),
  6   PRIMARY KEY ("REFERENCE","LINENO"),
  7   UPC                                                   VARCHAR2(14),
  8   DESCRIPTION                                        VARCHAR2(128),
  9   QUANTITY                                           NUMBER(10),
10   UNITPRICE                                          NUMBER(12,2)
11  )
12  /
Table created.
SQL> insert into PURCHASEORDER_TABLE values ('SMCCAIN-20030109123335470PDT','Samuel B. McCain','SMCCAIN','A10','Courier')
  2  /
1 row created.
SQL> insert into PURCHASEORDER_ACTION values ('SMCCAIN-20030109123335470PDT','SVOLLMAN',NULL)
  2  /
1 row created.
SQL> insert into PURCHASEORDER_SHIPPING values ('SMCCAIN-20030109123335470PDT','Samuel B. McCain','800 Bridge Parkway,Redwood Shores,CA,9406
5,USA','650 506 7800')
  2  /
1 row created.
SQL> insert into PURCHASEORDER_REJECTION values ('SMCCAIN-20030109123335470PDT',null,null,null)
  2  /
1 row created.
SQL> insert into PURCHASEORDER_LINEITEM values ('SMCCAIN-20030109123335470PDT','1','715515010320','Life of Brian - Monty Python''s','2','39.
95')
  2  /
1 row created.
SQL> insert into PURCHASEORDER_LINEITEM values ('SMCCAIN-20030109123335470PDT','2','37429145227','The Night Porter','2','29.95')
  2  /
1 row created.
SQL> insert into PURCHASEORDER_LINEITEM values ('SMCCAIN-20030109123335470PDT','3','37429128121','Oliver Twist','1','39.95')
  2  /
1 row created.
SQL> insert into PURCHASEORDER_LINEITEM values ('SMCCAIN-20030109123335470PDT','4','715515012720','Notorious','4','39.95')
  2  /
1 row created.
SQL> insert into PURCHASEORDER_LINEITEM values ('SMCCAIN-20030109123335470PDT','5','715515012928','In the Mood for Love','3','39.95')
  2  /
1 row created.
SQL> insert into PURCHASEORDER_LINEITEM values ('SMCCAIN-20030109123335470PDT','6','37429130926','Alphaville','2','29.95')
  2  /
1 row created.
SQL> insert into PURCHASEORDER_LINEITEM values ('SMCCAIN-20030109123335470PDT','7','37429166529','General Idi Amin Dada','4','29.95')
  2  /
1 row created.
SQL> insert into PURCHASEORDER_LINEITEM values ('SMCCAIN-20030109123335470PDT','8','715515012928','In the Mood for Love','3','39.95')
  2  /
1 row created.
SQL> insert into PURCHASEORDER_LINEITEM values ('SMCCAIN-20030109123335470PDT','9','715515009423','Flesh for Frankenstein','3','39.95')
  2  /
1 row created.
SQL> insert into PURCHASEORDER_LINEITEM values ('SMCCAIN-20030109123335470PDT','10','715515008976','The Killer','1','39.95')
  2  /
1 row created.
SQL> insert into PURCHASEORDER_LINEITEM values ('SMCCAIN-20030109123335470PDT','11','37429167922','Ballad of a Soldier','2','29.95')
  2  /
1 row created.
SQL> insert into PURCHASEORDER_LINEITEM values ('SMCCAIN-20030109123335470PDT','12','37429158623','Ordet','2','0')
  2  /
1 row created.
SQL> var schemaPath varchar2(256)
SQL> --
SQL> begin
  2    :schemaURL := 'http://xfiles:8080/home/SCOTT/poSource/xsd/purchaseOrder.xsd';
  3    :schemaPath := '/public/purchaseOrder.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  '<!-- edited with XML Spy v4.0 U (http://www.xmlspy.com) by Mark (Drake) -->
  5  <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xdb="http://xmlns.oracle.com/xdb" version="1.0" xdb:storeVarrayAsTable="tr
ue">
  6          <xs:element name="PurchaseOrder" type="PurchaseOrderType" xdb:defaultTable="PURCHASEORDER"/>
  7          <xs:complexType name="PurchaseOrderType" xdb:SQLType="PURCHASEORDER_T" xdb:maintainDOM="false">
  8                  <xs:sequence>
  9                          <xs:element name="Reference" type="ReferenceType" xdb:SQLName="REFERENCE"/>
10                          <xs:element name="Actions" type="ActionsType" xdb:SQLName="ACTIONS"/>
11                          <xs:element name="Reject" type="RejectionType" minOccurs="0" xdb:SQLName="REJECTION"/>
12                          <xs:element name="Requestor" type="RequestorType" xdb:SQLName="REQUESTOR"/>
13                          <xs:element name="User" type="UserType" xdb:SQLName="USERID"/>
14                          <xs:element name="CostCenter" type="CostCenterType" xdb:SQLName="COST_CENTER"/>
15                          <xs:element name="ShippingInstructions" type="ShippingInstructionsType" xdb:SQLName="SHIPPING_INSTRUCTIONS"/>
16                          <xs:element name="SpecialInstructions" type="SpecialInstructionsType" xdb:SQLName="SPECIAL_INSTRUCTIONS"/>
17                          <xs:element name="LineItems" type="LineItemsType" xdb:SQLName="LINEITEMS"/>
18                  </xs:sequence>
19          </xs:complexType>
20          <xs:complexType name="LineItemsType" xdb:SQLType="LINEITEMS_T" xdb:maintainDOM="false">
21                  <xs:sequence>
22                          <xs:element name="LineItem" type="LineItemType" maxOccurs="unbounded" xdb:SQLName="LINEITEM" xdb:SQLCollType="L
INEITEM_V"/>
23                  </xs:sequence>
24          </xs:complexType>
25          <xs:complexType name="LineItemType" xdb:SQLType="LINEITEM_T" xdb:maintainDOM="false">
26                  <xs:sequence>
27                          <xs:element name="Description" type="DescriptionType" xdb:SQLName="DESRIPTION"/>
28                          <xs:element name="Part" type="PartType" xdb:SQLName="PART"/>
29                  </xs:sequence>
30                  <xs:attribute name="ItemNumber" type="xs:integer" xdb:SQLName="ITEMNUMBER" xdb:SQLType="NUMBER"/>
31          </xs:complexType>
32          <xs:complexType name="PartType" xdb:SQLType="PART_T" xdb:maintainDOM="false">
33                  <xs:attribute name="Id" xdb:SQLName="PART_NUMBER" xdb:SQLType="VARCHAR2">
34                          <xs:simpleType>
35                                  <xs:restriction base="xs:string">
36                                          <xs:minLength value="10"/>
37                                          <xs:maxLength value="14"/>
38                                  </xs:restriction>
39                          </xs:simpleType>
40                  </xs:attribute>
41                  <xs:attribute name="Quantity" type="moneyType" xdb:SQLName="QUANTITY"/>
42                  <xs:attribute name="UnitPrice" type="quantityType" xdb:SQLName="UNITPRICE"/>
43          </xs:complexType>
44          <xs:simpleType name="ReferenceType">
45                  <xs:restriction base="xs:string">
46                          <xs:minLength value="18"/>
47                          <xs:maxLength value="30"/>
48                  </xs:restriction>
49          </xs:simpleType>
50          <xs:complexType name="ActionsType" xdb:SQLType="ACTIONS_T" xdb:maintainDOM="false">
51                  <xs:sequence>
52                          <xs:element name="Action" maxOccurs="4" xdb:SQLName="ACTION" xdb:SQLCollType="ACTION_V">
53                                  <xs:complexType xdb:SQLType="ACTION_T" xdb:maintainDOM="false">
54                                          <xs:sequence>
55                                                  <xs:element name="User" type="UserType" xdb:SQLName="ACTIONED_BY"/>
56                                                  <xs:element name="Date" type="DateType" minOccurs="0" xdb:SQLName="DATE_ACTIONED"/>
57                                          </xs:sequence>
58                                  </xs:complexType>
59                          </xs:element>
60                  </xs:sequence>
61          </xs:complexType>
62          <xs:complexType name="RejectionType" xdb:SQLType="REJECTION_T" xdb:maintainDOM="false">
63                  <xs:all>
64                          <xs:element name="User" type="UserType" minOccurs="0" xdb:SQLName="REJECTED_BY"/>
65                          <xs:element name="Date" type="DateType" minOccurs="0" xdb:SQLName="DATE_REJECTED"/>
66                          <xs:element name="Comments" type="CommentsType" minOccurs="0" xdb:SQLName="REASON_REJECTED"/>
67                  </xs:all>
68          </xs:complexType>
69          <xs:complexType name="ShippingInstructionsType" xdb:SQLType="SHIPPING_INSTRUCTIONS_T" xdb:maintainDOM="false">
70                  <xs:sequence>
71                          <xs:element name="name" type="NameType" minOccurs="0" xdb:SQLName="SHIP_TO_NAME"/>
72                          <xs:element name="address" type="AddressType" minOccurs="0" xdb:SQLName="SHIP_TO_ADDRESS"/>
73                          <xs:element name="telephone" type="TelephoneType" minOccurs="0" xdb:SQLName="SHIP_TO_PHONE"/>
74                  </xs:sequence>
75          </xs:complexType>
76          <xs:simpleType name="moneyType">
77                  <xs:restriction base="xs:decimal">
78                          <xs:fractionDigits value="2"/>
79                          <xs:totalDigits value="12"/>
80                  </xs:restriction>
81          </xs:simpleType>
82          <xs:simpleType name="quantityType">
83                  <xs:restriction base="xs:decimal">
84                          <xs:fractionDigits value="4"/>
85                          <xs:totalDigits value="8"/>
86                  </xs:restriction>
87          </xs:simpleType>
88          <xs:simpleType name="UserType">
89                  <xs:restriction base="xs:string">
90                          <xs:minLength value="1"/>
91                          <xs:maxLength value="10"/>
92                  </xs:restriction>
93          </xs:simpleType>
94          <xs:simpleType name="RequestorType">
95                  <xs:restriction base="xs:string">
96                          <xs:minLength value="0"/>
97                          <xs:maxLength value="128"/>
98                  </xs:restriction>
99          </xs:simpleType>
100          <xs:simpleType name="CostCenterType">
101                  <xs:restriction base="xs:string">
102                          <xs:minLength value="1"/>
103                          <xs:maxLength value="4"/>
104                  </xs:restriction>
105          </xs:simpleType>
106          <xs:simpleType name="VendorType">
107                  <xs:restriction base="xs:string">
108                          <xs:minLength value="0"/>
109                          <xs:maxLength value="20"/>
110                  </xs:restriction>
111          </xs:simpleType>
112          <xs:simpleType name="PurchaseOrderNumberType">
113                  <xs:restriction base="xs:integer"/>
114          </xs:simpleType>
115          <xs:simpleType name="SpecialInstructionsType">
116                  <xs:restriction base="xs:string">
117                          <xs:minLength value="0"/>
118                          <xs:maxLength value="2048"/>
119                  </xs:restriction>
120          </xs:simpleType>
121          <xs:simpleType name="NameType">
122                  <xs:restriction base="xs:string">
123                          <xs:minLength value="1"/>
124                          <xs:maxLength value="20"/>
125                  </xs:restriction>
126          </xs:simpleType>
127          <xs:simpleType name="AddressType">
128                  <xs:restriction base="xs:string">
129                          <xs:minLength value="1"/>
130                          <xs:maxLength value="256"/>
131                  </xs:restriction>
132          </xs:simpleType>
133          <xs:simpleType name="TelephoneType">
134                  <xs:restriction base="xs:string">
135                          <xs:minLength value="1"/>
136                          <xs:maxLength value="24"/>
137                  </xs:restriction>
138          </xs:simpleType>
139          <xs:simpleType name="DateType">
140                  <xs:restriction base="xs:date"/>
141          </xs:simpleType>
142          <xs:simpleType name="CommentsType">
143                  <xs:restriction base="xs:string">
144                          <xs:minLength value="1"/>
145                          <xs:maxLength value="2048"/>
146                  </xs:restriction>
147          </xs:simpleType>
148          <xs:simpleType name="DescriptionType">
149                  <xs:restriction base="xs:string">
150                          <xs:minLength value="1"/>
151                          <xs:maxLength value="256"/>
152                  </xs:restriction>
153          </xs:simpleType>
154  </xs:schema>
155  ');
156  begin
157    if (dbms_xdb.existsResource(:schemaPath)) then
158      dbms_xdb.deleteResource(:schemaPath);
159    end if;
160    res := dbms_xdb.createResource(:schemaPath,xmlSchema);
161  end;
162  /
PL/SQL procedure successfully completed.
SQL> begin
  2    dbms_xmlschema.registerSchema
  3    (
  4      :schemaURL,
  5      xdbURIType(:schemaPath).getClob(),
  6      TRUE,TRUE,FALSE,FALSE
  7    );
  8  end;
  9  /
PL/SQL procedure successfully completed.
SQL> create or replace view PURCHASEORDER_XML
  2  of xmltype
  3  xmlSCHEMA "http://xfiles:8080/home/SCOTT/poSource/xsd/purchaseOrder.xsd" Element "PurchaseOrder"
  4  with object id
  5  (
  6    substr(extractValue(object_value,'/PurchaseOrder/Reference'),1,32)
  7  )
  8  as
  9    select xmlElement
10           (
11             "PurchaseOrder",
12             xmlAttributes
13             (
14               'http://xfiles:8080/home/SCOTT/poSource/xsd/purchaseOrder.xsd' as "xsi:noNamespaceSchemaLocation",
15               'http://www.w3.org/2001/XMLSchema-instance' as "xmlns:xsi"
16             ),
17             xmlElement("Reference",p.REFERENCE),
18             xmlElement
19             (
20               "Actions",
21               ( select xmlAgg
22                        (
23                          xmlElement
24                          (
25                            "Action",
26                            xmlElement("User",ACTIONEDBY),
27                            case
28                              when DATEACTIONED is not null
29                              then xmlElement("Date",DATEACTIONED)
30                            end
31                          )
32                        )
33                   from PURCHASEORDER_ACTION a
34                  where a.REFERENCE = p.REFERENCE
35               )
36             ),
37             xmlElement
38             (
39               "Reject",
40                  xmlForest
41                  (
42                    REJECTEDBY as "User",
43                 DATEREJECTED as "Date",
44                    COMMENTS as "Comments"
45                  )
46             ),
47             xmlElement("Requestor",REQUESTER),
48             xmlElement("User",USERID),
49             xmlElement("CostCenter",COSTCENTER),
50             xmlElement
51             (
52               "ShippingInstructions",
53               xmlElement("name",SHIPTONAME),
54               xmlElement("address",ADDRESS),
55               xmlElement("telephone",PHONE)
56             ),
57             xmlElement("SpecialInstructions",SPECIALINSTRUCTIONS),
58             xmlElement
59             (
60               "LineItems",
61               ( select xmlAgg
62                        (
63                          xmlElement
64                          (
65                            "LineItem",
66                            xmlAttributes(LINENO as "ItemNumber"),
67                            xmlElement("Description",DESCRIPTION),
68                            xmlElement
69                            (
70                              "Part",
71                              xmlAttributes
72                              (
73                                UPC       as "Id",
74                                QUANTITY  as "Quantity",
75                                UNITPRICE as "UnitPrice"
76                              )
77                            )
78                          )
79                        )
80                    from PURCHASEORDER_LINEITEM l
81                   where l.REFERENCE = p.REFERENCE
82               )
83             )
84           )
85      from PURCHASEORDER_TABLE p, PURCHASEORDER_REJECTION r, PURCHASEORDER_SHIPPING s
86     where r.REFERENCE = p.REFERENCE
87       and s.REFERENCE = p.REFERENCE
88  /
View created.
SQL> set long 10000 pages 0 lines 140
SQL> --
SQL> select x.object_value.extract('/*')
  2    from PURCHASEORDER_XML x
  3  /
<PurchaseOrder xsi:noNamespaceSchemaLocation="http://xfiles:8080/home/SCOTT/poSource/xsd/purchaseOrder.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Reference>SMCCAIN-20030109123335470PDT</Reference>
  <Actions>
    <Action>
      <User>SVOLLMAN</User>
    </Action>
  </Actions>
  <Reject/>
  <Requestor>Samuel B. McCain</Requestor>
  <User>SMCCAIN</User>
  <CostCenter>A10</CostCenter>
  <ShippingInstructions>
    <name>Samuel B. McCain</name>
    <address>800 Bridge Parkway,Redwood Shores,CA,94065,USA</address>
    <telephone>650 506 7800</telephone>
  </ShippingInstructions>
  <SpecialInstructions>Courier</SpecialInstructions>
  <LineItems>
    <LineItem ItemNumber="1">
      <Description>Life of Brian - Monty Python&apos;s</Description>
      <Part Id="715515010320" Quantity="2" UnitPrice="39.95"/>
    </LineItem>
    <LineItem ItemNumber="2">
      <Description>The Night Porter</Description>
      <Part Id="37429145227" Quantity="2" UnitPrice="29.95"/>
    </LineItem>
    <LineItem ItemNumber="3">
      <Description>Oliver Twist</Description>
      <Part Id="37429128121" Quantity="1" UnitPrice="39.95"/>
    </LineItem>
    <LineItem ItemNumber="4">
      <Description>Notorious</Description>
      <Part Id="715515012720" Quantity="4" UnitPrice="39.95"/>
    </LineItem>
    <LineItem ItemNumber="5">
      <Description>In the Mood for Love</Description>
      <Part Id="715515012928" Quantity="3" UnitPrice="39.95"/>
    </LineItem>
    <LineItem ItemNumber="6">
      <Description>Alphaville</Description>
      <Part Id="37429130926" Quantity="2" UnitPrice="29.95"/>
    </LineItem>
    <LineItem ItemNumber="7">
      <Description>General Idi Amin Dada</Description>
      <Part Id="37429166529" Quantity="4" UnitPrice="29.95"/>
    </LineItem>
    <LineItem ItemNumber="8">
      <Description>In the Mood for Love</Description>
      <Part Id="715515012928" Quantity="3" UnitPrice="39.95"/>
    </LineItem>
    <LineItem ItemNumber="9">
      <Description>Flesh for Frankenstein</Description>
      <Part Id="715515009423" Quantity="3" UnitPrice="39.95"/>
    </LineItem>
    <LineItem ItemNumber="10">
      <Description>The Killer</Description>
      <Part Id="715515008976" Quantity="1" UnitPrice="39.95"/>
    </LineItem>
    <LineItem ItemNumber="11">
      <Description>Ballad of a Soldier</Description>
      <Part Id="37429167922" Quantity="2" UnitPrice="29.95"/>
    </LineItem>
    <LineItem ItemNumber="12">
      <Description>Ordet</Description>
      <Part Id="37429158623" Quantity="2" UnitPrice="0"/>
    </LineItem>
  </LineItems>
</PurchaseOrder>
SQL> begin
  2    for x in (select object_value from PURCHASEORDER_XML) loop
  3      x.object_value.schemaValidate();
  4    end loop;
  5  end;
  6  /
PL/SQL procedure successfully completed.
SQL>

There is no automated way in Oracle XML DB to define an automatic mapping between a set of columns in some existing relational tables and the elements and attributres defined by an XML Schema.
However it is easy solve this problem by using the SQL/XML operators (XMLAGG, XMLELEMENT, XMLFOREST, XMLATTRIBUTES, etc) to generate XML documents that are compliant with an XML Schema directly from a SQL statement.
If the XML Schema is registered with Oracle XML DB and the appropraite Schema Location information is added into the generated document using XMLAttributes then it becomes very easy to ensure that the generated documents are valid.
The following example show an easy way to do this by creating an XML View that contains the documents to be validated.
SQL> drop table PURCHASEORDER_LINEITEM
  2  /
Table dropped.
SQL> drop table PURCHASEORDER_REJECTION
  2  /
Table dropped.
SQL> drop table PURCHASEORDER_SHIPPING
  2  /
Table dropped.
SQL> drop TABLE PURCHASEORDER_ACTION
  2  /
Table dropped.
SQL> drop TABLE PURCHASEORDER_TABLE
  2  /
Table dropped.
SQL> create table PURCHASEORDER_TABLE
  2  (
  3   REFERENCE                                          VARCHAR2(28),
  4   PRIMARY KEY ("REFERENCE"),
  5   REQUESTER                                          VARCHAR2(48),
  6   USERID                                             VARCHAR2(32),
  7   COSTCENTER                                         VARCHAR2(3),
  8   SPECIALINSTRUCTIONS                                VARCHAR2(2048)
  9  )
10  /
Table created.
SQL> create table PURCHASEORDER_ACTION
  2  (
  3   REFERENCE,
  4   FOREIGN KEY ("REFERENCE")                          REFERENCES "PURCHASEORDER_TABLE" ("REFERENCE") ON DELETE CASCADE,
  5   ACTIONEDBY                                         VARCHAR2(32),
  6   DATEACTIONED                                       DATE
  7  )
  8  /
Table created.
SQL> create table PURCHASEORDER_SHIPPING
  2  (
  3   REFERENCE,
  4   FOREIGN KEY ("REFERENCE")                          REFERENCES "PURCHASEORDER_TABLE" ("REFERENCE") ON DELETE CASCADE,
  5   PRIMARY KEY ("REFERENCE"),
  6   SHIPTONAME                                         VARCHAR2(48),
  7   ADDRESS                                            VARCHAR2(512),
  8   PHONE                                              VARCHAR2(32)
  9  )
10  /
Table created.
SQL> create table PURCHASEORDER_REJECTION
  2  (
  3   REFERENCE,
  4   FOREIGN KEY ("REFERENCE")                          REFERENCES "PURCHASEORDER_TABLE" ("REFERENCE") ON DELETE CASCADE,
  5   PRIMARY KEY ("REFERENCE"),
  6   REJECTEDBY                                         VARCHAR2(32),
  7   DATEREJECTED                                       DATE,
  8   COMMENTS                                           VARCHAR2(2048)
  9  )
10  /
Table created.
SQL> create table PURCHASEORDER_LINEITEM
  2  (
  3   REFERENCE,
  4   FOREIGN KEY ("REFERENCE")                          REFERENCES "PURCHASEORDER_TABLE" ("REFERENCE") ON DELETE CASCADE,
  5   LINENO                                             NUMBER(10),
  6   PRIMARY KEY ("REFERENCE","LINENO"),
  7   UPC                                                   VARCHAR2(14),
  8   DESCRIPTION                                        VARCHAR2(128),
  9   QUANTITY                                           NUMBER(10),
10   UNITPRICE                                          NUMBER(12,2)
11  )
12  /
Table created.
SQL> insert into PURCHASEORDER_TABLE values ('SMCCAIN-20030109123335470PDT','Samuel B. McCain','SMCCAIN','A10','Courier')
  2  /
1 row created.
SQL> insert into PURCHASEORDER_ACTION values ('SMCCAIN-20030109123335470PDT','SVOLLMAN',NULL)
  2  /
1 row created.
SQL> insert into PURCHASEORDER_SHIPPING values ('SMCCAIN-20030109123335470PDT','Samuel B. McCain','800 Bridge Parkway,Redwood Shores,CA,9406
5,USA','650 506 7800')
  2  /
1 row created.
SQL> insert into PURCHASEORDER_REJECTION values ('SMCCAIN-20030109123335470PDT',null,null,null)
  2  /
1 row created.
SQL> insert into PURCHASEORDER_LINEITEM values ('SMCCAIN-20030109123335470PDT','1','715515010320','Life of Brian - Monty Python''s','2','39.
95')
  2  /
1 row created.
SQL> insert into PURCHASEORDER_LINEITEM values ('SMCCAIN-20030109123335470PDT','2','37429145227','The Night Porter','2','29.95')
  2  /
1 row created.
SQL> insert into PURCHASEORDER_LINEITEM values ('SMCCAIN-20030109123335470PDT','3','37429128121','Oliver Twist','1','39.95')
  2  /
1 row created.
SQL> insert into PURCHASEORDER_LINEITEM values ('SMCCAIN-20030109123335470PDT','4','715515012720','Notorious','4','39.95')
  2  /
1 row created.
SQL> insert into PURCHASEORDER_LINEITEM values ('SMCCAIN-20030109123335470PDT','5','715515012928','In the Mood for Love','3','39.95')
  2  /
1 row created.
SQL> insert into PURCHASEORDER_LINEITEM values ('SMCCAIN-20030109123335470PDT','6','37429130926','Alphaville','2','29.95')
  2  /
1 row created.
SQL> insert into PURCHASEORDER_LINEITEM values ('SMCCAIN-20030109123335470PDT','7','37429166529','General Idi Amin Dada','4','29.95')
  2  /
1 row created.
SQL> insert into PURCHASEORDER_LINEITEM values ('SMCCAIN-20030109123335470PDT','8','715515012928','In the Mood for Love','3','39.95')
  2  /
1 row created.
SQL> insert into PURCHASEORDER_LINEITEM values ('SMCCAIN-20030109123335470PDT','9','715515009423','Flesh for Frankenstein','3','39.95')
  2  /
1 row created.
SQL> insert into PURCHASEORDER_LINEITEM values ('SMCCAIN-20030109123335470PDT','10','715515008976','The Killer','1','39.95')
  2  /
1 row created.
SQL> insert into PURCHASEORDER_LINEITEM values ('SMCCAIN-20030109123335470PDT','11','37429167922','Ballad of a Soldier','2','29.95')
  2  /
1 row created.
SQL> insert into PURCHASEORDER_LINEITEM values ('SMCCAIN-20030109123335470PDT','12','37429158623','Ordet','2','0')
  2  /
1 row created.
SQL> var schemaPath varchar2(256)
SQL> --
SQL> begin
  2    :schemaURL := 'http://xfiles:8080/home/SCOTT/poSource/xsd/purchaseOrder.xsd';
  3    :schemaPath := '/public/purchaseOrder.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  '<!-- edited with XML Spy v4.0 U (http://www.xmlspy.com) by Mark (Drake) -->
  5  <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xdb="http://xmlns.oracle.com/xdb" version="1.0" xdb:storeVarrayAsTable="tr
ue">
  6          <xs:element name="PurchaseOrder" type="PurchaseOrderType" xdb:defaultTable="PURCHASEORDER"/>
  7          <xs:complexType name="PurchaseOrderType" xdb:SQLType="PURCHASEORDER_T" xdb:maintainDOM="false">
  8                  <xs:sequence>
  9                          <xs:element name="Reference" type="ReferenceType" xdb:SQLName="REFERENCE"/>
10                          <xs:element name="Actions" type="ActionsType" xdb:SQLName="ACTIONS"/>
11                          <xs:element name="Reject" type="RejectionType" minOccurs="0" xdb:SQLName="REJECTION"/>
12                          <xs:element name="Requestor" type="RequestorType" xdb:SQLName="REQUESTOR"/>
13                          <xs:element name="User" type="UserType" xdb:SQLName="USERID"/>
14                          <xs:element name="CostCenter" type="CostCenterType" xdb:SQLName="COST_CENTER"/>
15                          <xs:element name="ShippingInstructions" type="ShippingInstructionsType" xdb:SQLName="SHIPPING_INSTRUCTIONS"/>
16                          <xs:element name="SpecialInstructions" type="SpecialInstructionsType" xdb:SQLName="SPECIAL_INSTRUCTIONS"/>
17                          <xs:element name="LineItems" type="LineItemsType" xdb:SQLName="LINEITEMS"/>
18                  </xs:sequence>
19          </xs:complexType>
20          <xs:complexType name="LineItemsType" xdb:SQLType="LINEITEMS_T" xdb:maintainDOM="false">
21                  <xs:sequence>
22                          <xs:element name="LineItem" type="LineItemType" maxOccurs="unbounded" xdb:SQLName="LINEITEM" xdb:SQLCollType="L
INEITEM_V"/>
23                  </xs:sequence>
24          </xs:complexType>
25          <xs:complexType name="LineItemType" xdb:SQLType="LINEITEM_T" xdb:maintainDOM="false">
26                  <xs:sequence>
27                          <xs:element name="Description" type="DescriptionType" xdb:SQLName="DESRIPTION"/>
28                          <xs:element name="Part" type="PartType" xdb:SQLName="PART"/>
29                  </xs:sequence>
30                  <xs:attribute name="ItemNumber" type="xs:integer" xdb:SQLName="ITEMNUMBER" xdb:SQLType="NUMBER"/>
31          </xs:complexType>
32          <xs:complexType name="PartType" xdb:SQLType="PART_T" xdb:maintainDOM="false">
33                  <xs:attribute name="Id" xdb:SQLName="PART_NUMBER" xdb:SQLType="VARCHAR2">
34                          <xs:simpleType>
35                                  <xs:restriction base="xs:string">
36                                          <xs:minLength value="10"/>
37                                          <xs:maxLength value="14"/>
38                                  </xs:restriction>
39                          </xs:simpleType>
40                  </xs:attribute>
41                  <xs:attribute name="Quantity" type="moneyType" xdb:SQLName="QUANTITY"/>
42                  <xs:attribute name="UnitPrice" type="quantityType" xdb:SQLName="UNITPRICE"/>
43          </xs:complexType>
44          <xs:simpleType name="ReferenceType">
45                  <xs:restriction base="xs:string">
46                          <xs:minLength value="18"/>
47                          <xs:maxLength value="30"/>
48                  </xs:restriction>
49          </xs:simpleType>
50          <xs:complexType name="ActionsType" xdb:SQLType="ACTIONS_T" xdb:maintainDOM="false">
51                  <xs:sequence>
52                          <xs:element name="Action" maxOccurs="4" xdb:SQLName="ACTION" xdb:SQLCollType="ACTION_V">
53                                  <xs:complexType xdb:SQLType="ACTION_T" xdb:maintainDOM="false">
54                                          <xs:sequence>
55                                                  <xs:element name="User" type="UserType" xdb:SQLName="ACTIONED_BY"/>
56                                                  <xs:element name="Date" type="DateType" minOccurs="0" xdb:SQLName="DATE_ACTIONED"/>
57                                          </xs:sequence>
58                                  </xs:complexType>
59                          </xs:element>
60                  </xs:sequence>
61          </xs:complexType>
62          <xs:complexType name="RejectionType" xdb:SQLType="REJECTION_T" xdb:maintainDOM="false">
63                  <xs:all>
64                          <xs:element name="User" type="UserType" minOccurs="0" xdb:SQLName="REJECTED_BY"/>
65                          <xs:element name="Date" type="DateType" minOccurs="0" xdb:SQLName="DATE_REJECTED"/>
66                          <xs:element name="Comments" type="CommentsType" minOccurs="0" xdb:SQLName="REASON_REJECTED"/>
67                  </xs:all>
68          </xs:complexType>
69          <xs:complexType name="ShippingInstructionsType" xdb:SQLType="SHIPPING_INSTRUCTIONS_T" xdb:maintainDOM="false">
70                  <xs:sequence>
71                          <xs:element name="name" type="NameType" minOccurs="0" xdb:SQLName="SHIP_TO_NAME"/>
72                          <xs:element name="address" type="AddressType" minOccurs="0" xdb:SQLName="SHIP_TO_ADDRESS"/>
73                          <xs:element name="telephone" type="TelephoneType" minOccurs="0" xdb:SQLName="SHIP_TO_PHONE"/>
74                  </xs:sequence>
75          </xs:complexType>
76          <xs:simpleType name="moneyType">
77                  <xs:restriction base="xs:decimal">
78                          <xs:fractionDigits value="2"/>
79                          <xs:totalDigits value="12"/>
80                  </xs:restriction>
81          </xs:simpleType>
82          <xs:simpleType name="quantityType">
83                  <xs:restriction base="xs:decimal">
84                          <xs:fractionDigits value="4"/>
85                          <xs:totalDigits value="8"/>
86                  </xs:restriction>
87          </xs:simpleType>
88          <xs:simpleType name="UserType">
89                  <xs:restriction base="xs:string">
90                          <xs:minLength value="1"/>
91                          <xs:maxLength value="10"/>
92                  </xs:restriction>
93          </xs:simpleType>
94          <xs:simpleType name="RequestorType">
95                  <xs:restriction base="xs:string">
96                          <xs:minLength value="0"/>
97                          <xs:maxLength value="128"/>
98                  </xs:restriction>
99          </xs:simpleType>
100          <xs:simpleType name="CostCenterType">
101                  <xs:restriction base="xs:string">
102                          <xs:minLength value="1"/>
103                          <xs:maxLength value="4"/>
104                  </xs:restriction>
105          </xs:simpleType>
106          <xs:simpleType name="VendorType">
107                  <xs:restriction base="xs:string">
108                          <xs:minLength value="0"/>
109                          <xs:maxLength value="20"/>
110                  </xs:restriction>
111          </xs:simpleType>
112          <xs:simpleType name="PurchaseOrderNumberType">
113                  <xs:restriction base="xs:integer"/>
114          </xs:simpleType>
115          <xs:simpleType name="SpecialInstructionsType">
116                  <xs:restriction base="xs:string">
117                          <xs:minLength value="0"/>
118                          <xs:maxLength value="2048"/>
119                  </xs:restriction>
120          </xs:simpleType>
121          <xs:simpleType name="NameType">
122                  <xs:restriction base="xs:string">
123                          <xs:minLength value="1"/>
124                          <xs:maxLength value="20"/>
125                  </xs:restriction>
126          </xs:simpleType>
127          <xs:simpleType name="AddressType">
128                  <xs:restriction base="xs:string">
129                          <xs:minLength value="1"/>
130                          <xs:maxLength value="256"/>
131                  </xs:restriction>
132          </xs:simpleType>
133          <xs:simpleType name="TelephoneType">
134                  <xs:restriction base="xs:string">
135                          <xs:minLength value="1"/>
136                          <xs:maxLength value="24"/>
137                  </xs:restriction>
138          </xs:simpleType>
139          <xs:simpleType name="DateType">
140                  <xs:restriction base="xs:date"/>
141          </xs:simpleType>
142          <xs:simpleType name="CommentsType">
143                  <xs:restriction base="xs:string">
144                          <xs:minLength value="1"/>
145                          <xs:maxLength value="2048"/>
146                  </xs:restriction>
147          </xs:simpleType>
148          <xs:simpleType name="DescriptionType">
149                  <xs:restriction base="xs:string">
150                          <xs:minLength value="1"/>
151                          <xs:maxLength value="256"/>
152                  </xs:restriction>
153          </xs:simpleType>
154  </xs:schema>
155  ');
156  begin
157    if (dbms_xdb.existsResource(:schemaPath)) then
158      dbms_xdb.deleteResource(:schemaPath);
159    end if;
160    res := dbms_xdb.createResource(:schemaPath,xmlSchema);
161  end;
162  /
PL/SQL procedure successfully completed.
SQL> begin
  2    dbms_xmlschema.registerSchema
  3    (
  4      :schemaURL,
  5      xdbURIType(:schemaPath).getClob(),
  6      TRUE,TRUE,FALSE,FALSE
  7    );
  8  end;
  9  /
PL/SQL procedure successfully completed.
SQL> create or replace view PURCHASEORDER_XML
  2  of xmltype
  3  xmlSCHEMA "http://xfiles:8080/home/SCOTT/poSource/xsd/purchaseOrder.xsd" Element "PurchaseOrder"
  4  with object id
  5  (
  6    substr(extractValue(object_value,'/PurchaseOrder/Reference'),1,32)
  7  )
  8  as
  9    select xmlElement
10           (
11             "PurchaseOrder",
12             xmlAttributes
13             (
14               'http://xfiles:8080/home/SCOTT/poSource/xsd/purchaseOrder.xsd' as "xsi:noNamespaceSchemaLocation",
15               'http://www.w3.org/2001/XMLSchema-instance' as "xmlns:xsi"
16             ),
17             xmlElement("Reference",p.REFERENCE),
18             xmlElement
19             (
20               "Actions",
21               ( select xmlAgg
22                        (
23                          xmlElement
24                          (
25                            "Action",
26                            xmlElement("User",ACTIONEDBY),
27                            case
28                              when DATEACTIONED is not null
29                              then xmlElement("Date",DATEACTIONED)
30                            end
31                          )
32                        )
33                   from PURCHASEORDER_ACTION a
34                  where a.REFERENCE = p.REFERENCE
35               )
36             ),
37             xmlElement
38             (
39               "Reject",
40                  xmlForest
41                  (
42                    REJECTEDBY as "User",
43                 DATEREJECTED as "Date",
44                    COMMENTS as "Comments"
45                  )
46             ),
47             xmlElement("Requestor",REQUESTER),
48             xmlElement("User",USERID),
49             xmlElement("CostCenter",COSTCENTER),
50             xmlElement
51             (
52               "ShippingInstructions",
53               xmlElement("name",SHIPTONAME),
54               xmlElement("address",ADDRESS),
55               xmlElement("telephone",PHONE)
56             ),
57             xmlElement("SpecialInstructions",SPECIALINSTRUCTIONS),
58             xmlElement
59             (
60               "LineItems",
61               ( select xmlAgg
62                        (
63                          xmlElement
64                          (
65                            "LineItem",
66                            xmlAttributes(LINENO as "ItemNumber"),
67                            xmlElement("Description",DESCRIPTION),
68                            xmlElement
69                            (
70                              "Part",
71                              xmlAttributes
72                              (
73                                UPC       as "Id",
74                                QUANTITY  as "Quantity",
75                                UNITPRICE as "UnitPrice"
76                              )
77                            )
78                          )
79                        )
80                    from PURCHASEORDER_LINEITEM l
81                   where l.REFERENCE = p.REFERENCE
82               )
83             )
84           )
85      from PURCHASEORDER_TABLE p, PURCHASEORDER_REJECTION r, PURCHASEORDER_SHIPPING s
86     where r.REFERENCE = p.REFERENCE
87       and s.REFERENCE = p.REFERENCE
88  /
View created.
SQL> set long 10000 pages 0 lines 140
SQL> --
SQL> select x.object_value.extract('/*')
  2    from PURCHASEORDER_XML x
  3  /
<PurchaseOrder xsi:noNamespaceSchemaLocation="http://xfiles:8080/home/SCOTT/poSource/xsd/purchaseOrder.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Reference>SMCCAIN-20030109123335470PDT</Reference>
  <Actions>
    <Action>
      <User>SVOLLMAN</User>
    </Action>
  </Actions>
  <Reject/>
  <Requestor>Samuel B. McCain</Requestor>
  <User>SMCCAIN</User>
  <CostCenter>A10</CostCenter>
  <ShippingInstructions>
    <name>Samuel B. McCain</name>
    <address>800 Bridge Parkway,Redwood Shores,CA,94065,USA</address>
    <telephone>650 506 7800</telephone>
  </ShippingInstructions>
  <SpecialInstructions>Courier</SpecialInstructions>
  <LineItems>
    <LineItem ItemNumber="1">
      <Description>Life of Brian - Monty Python&apos;s</Description>
      <Part Id="715515010320" Quantity="2" UnitPrice="39.95"/>
    </LineItem>
    <LineItem ItemNumber="2">
      <Description>The Night Porter</Description>
      <Part Id="37429145227" Quantity="2" UnitPrice="29.95"/>
    </LineItem>
    <LineItem ItemNumber="3">
      <Description>Oliver Twist</Description>
      <Part Id="37429128121" Quantity="1" UnitPrice="39.95"/>
    </LineItem>
    <LineItem ItemNumber="4">
      <Description>Notorious</Description>
      <Part Id="715515012720" Quantity="4" UnitPrice="39.95"/>
    </LineItem>
    <LineItem ItemNumber="5">
      <Description>In the Mood for Love</Description>
      <Part Id="715515012928" Quantity="3" UnitPrice="39.95"/>
    </LineItem>
    <LineItem ItemNumber="6">
      <Description>Alphaville</Description>
      <Part Id="37429130926" Quantity="2" UnitPrice="29.95"/>
    </LineItem>
    <LineItem ItemNumber="7">
      <Description>General Idi Amin Dada</Description>
      <Part Id="37429166529" Quantity="4" UnitPrice="29.95"/>
    </LineItem>
    <LineItem ItemNumber="8">
      <Description>In the Mood for Love</Description>
      <Part Id="715515012928" Quantity="3" UnitPrice="39.95"/>
    </LineItem>
    <LineItem ItemNumber="9">
      <Description>Flesh for Frankenstein</Description>
      <Part Id="715515009423" Quantity="3" UnitPrice="39.95"/>
    </LineItem>
    <LineItem ItemNumber="10">
      <Description>The Killer</Description>
      <Part Id="715515008976" Quantity="1" UnitPrice="39.95"/>
    </LineItem>
    <LineItem ItemNumber="11">
      <Description>Ballad of a Soldier</Description>
      <Part Id="37429167922" Quantity="2" UnitPrice="29.95"/>
    </LineItem>
    <LineItem ItemNumber="12">
      <Description>Ordet</Description>
      <Part Id="37429158623" Quantity="2" UnitPrice="0"/>
    </LineItem>
  </LineItems>
</PurchaseOrder>
SQL> begin
  2    for x in (select object_value from PURCHASEORDER_XML) loop
  3      x.object_value.schemaValidate();
  4    end loop;
  5  end;
  6  /
PL/SQL procedure successfully completed.
SQL>

Similar Messages

  • How to retrieve data from catsdb table and convert into xml using BAPI

    How to retrieve data from catsdb table and convert into xml using BAPI
    Points will be rewarded,
    Thank you,
    Regards,
    Jagrut BharatKumar Shukla

    Hi,
    This is not your requirment but u can try this :
    CREATE OR REPLACE DIRECTORY text_file AS 'D:\TEXT_FILE\';
    GRANT READ ON DIRECTORY text_file TO fah;
    GRANT WRITE ON DIRECTORY text_file TO fah;
    DROP TABLE load_a;
    CREATE TABLE load_a
    (a1 varchar2(20),
    a2 varchar2(200))
    ORGANIZATION EXTERNAL
    (TYPE ORACLE_LOADER
    DEFAULT DIRECTORY text_file
    ACCESS PARAMETERS
    (FIELDS TERMINATED BY ','
    LOCATION ('data.txt')
    select * from load_a;
    CREATE TABLE A AS select * from load_a;
    SELECT * FROM A
    Regards
    Faheem Latif

  • Creating XML from Relational Tables using java

    I would like to create an XML document by querying relational tables in java
    try {
            connection = getConnection();
            final String qryStr = "select XMLElement( foo, 'bar' ) from dual";
            final OracleXMLQuery qry = new OracleXMLQuery(connection, qryStr);
            final String xmlString = qry.getXMLString();
    I would expect this to give the following result that I get from running the statement in SQL Developer
    select XMLElement( foo, 'bar' ) from dual
    <FOO>bar</FOO>
    Instead I get
    <?xml version = '1.0'?>
    <ERROR>oracle.xml.sql.OracleXMLSQLException: Character ')' is not allowed in an XML tag name.</ERROR>
    Is this the correct way to go about this?

    Is this the correct way to go about this?
    Not really.
    OracleXMLQuery class is the Java-side implementation of DBMS_XMLQUERY APIs.
    It's mostly designed to generate a canonical XML document out of a SQL query.
    Assuming a query like "SELECT col1, col2 FROM my_table", the resulting XML should appear like this :
    <ROWSET>
      <ROW>
        <COL1>123</COL1>
        <COL2>ABC</COL2>
      </ROW>
      <ROW>
        <COL1>456</COL1>
        <COL2>XYZ</COL2>
      </ROW>
    </ROWSET>
    So in your test, since the resulting column is not aliased (XMLElement), you're actually trying to generate something like this :
    <ROWSET>
      <ROW>
        <XMLELEMENT(FOO,'BAR')>
          <FOO>bar</FOO>
        </XMLELEMENT(FOO,'BAR')>
      </ROW>
    <ROWSET>
    which of course is invalid, hence the error message.
    If you want to generate only <FOO>bar</FOO> as output, just use a regular PreparedStatement with your query and access the document in the ResultSet with the proper getter.

  • How to fetch data from CDHDR Table based on Order Number

    Hi,
    I need to fetch the data from CDHDR just based on the Order number .I found there is a field called 'OBJECTID' in table 'CDHDR'. But the  last part of OBJECTID contains order number.suppose my order number is 90506210 the objectid field contains '51030000090506210'.510 is login client,don't know what 30 is and last part is order number i.e 000090506210.i have to concatenate all and fetch data .i can do it for one order number but here order number is declared as select-options.how do i ?
    HERE IS THE CODE FOR ONE ORDER NUMBER.HOW CAN DO FOR RANGE OF ORDER NUMBERS.
    PARAMETER : S_OBJECT FOR  /BEV1/RBVBAK-AUFNR  OBLIGATORY.
    DATA : IT_CDHDR TYPE STANDARD TABLE OF CDHDR WITH HEADER LINE,
                 WA_CDHDR LIKE LINE OF IT_CDHDR,
                 S_OBJECT1 LIKE CDHDR-OBJECTID.
    CONCATENATE  sy-mandt  '30'  S_OBJECT INTO S_OBJECT1.
    SELECT * FROM CDHDR INTO TABLE IT_CDHDR WHERE OBJECTID = S_OBJECT1.

    P838355 wrote:>
    > Hi,
    >  I need to fetch the data from CDHDR just based on the Order number .I found there is a field called 'OBJECTID' in table 'CDHDR'. But the  last part of OBJECTID contains order number.suppose my order number is 90506210 the objectid field contains '51030000090506210'.510 is login client,don't know what 30 is and last part is order number i.e 000090506210.i have to concatenate all and fetch data .i can do it for one order number but here order number is declared as select-options.how do i ?
    >
    > HERE IS THE CODE FOR ONE ORDER NUMBER.HOW CAN DO FOR RANGE OF ORDER NUMBERS.
    >
    >
    > PARAMETER : S_OBJECT FOR  /BEV1/RBVBAK-AUFNR  OBLIGATORY.
    >
    > DATA : IT_CDHDR TYPE STANDARD TABLE OF CDHDR WITH HEADER LINE,
    >              WA_CDHDR LIKE LINE OF IT_CDHDR,
    >              S_OBJECT1 LIKE CDHDR-OBJECTID.
    >
    > CONCATENATE  sy-mandt  '30'  S_OBJECT INTO S_OBJECT1.
    >
    > SELECT * FROM CDHDR INTO TABLE IT_CDHDR WHERE OBJECTID = S_OBJECT1.
    You need to loop through the select option and concatenate with required data then select using 'in' instead of equal or select one by one.
    or
    select sales order numbers from VBAK for the selection into internal table then loop through the internal table and concatenate then select from CDHDR.
    for better performance use objectclass in where clause. the value for sales order for objectclass is VERKBELEG.
    in my system the object id is just an order number there is no other additions to it but in CDPOS the tabkey contains the order number with client and other information also.
    the 30 may be your item number... check it
    go ahead and change sales order and see what you can find in CDHDR
    Good luck
    Edited by: Sampath Kumar on Oct 21, 2009 9:02 AM

  • Generate xml from a table and insert the xml into another table

    I want to generate an xml file from a table and insert it into another table all in one tsql
    insert into table B(xmlfile)
    select * from tableA
    FOR
    XML
    PATH('ac'),TYPE,ELEMENTS
    XSINIL,ROOT('Accum')
    Is not working any help

    I have solved my issue all I did was to change my column datatype to xml

  • How to create partition from one table to another?

    Hi,
    Can any one help me in this :
    I have copied table from one schema to another by using the following command. The table is around 300 GB in size and the partitions are not copied. Now i got a request to create partitions in the destination table similar to the source table.
    CREATE TABLE user2.table_name AS SELECT * FROM  user1.table_name;
    I am using Oracle 9i database. This is very urgent, could any one please suggest me how can i create the partitions in  user2 table as user1 table.

    If you have the TOAD/ SQL DEVELOPER  , get the partition DDL from the source table and execute it in the newly created table.
    or you can use DBMS_METADATA:
    SET LONG 10000
    SELECT dbms_metadata.get_ddl('TABLE', 'TEST')
    FROM DUAL;
    Thanks,
    <Moderator Edit - deleted link signature - pl see FAQ link on top right>

  • Generating XML from relational tables and storing back in CLOB field

    I have been reviewing the documentation and trying to figure out the best approach. I am on v 10.2.0.3 and need to select from a parent table and three child tables and want to generate the results as xml that I will place in a clob field in another table. I looked at XMLQuery and dbms_xmlgen.getxml. The difference appears to be that getxml allows you to code traditional sql to join the tables.
    I would greatly appreciate it if someone could provide some feedback and any sample code along the line that I describe above.
    Thank you in advance for your help!
    Jerry

    Any feedback to the above questions would be greatly appreciated!

  • Help me how to create report from below  tables

    I want to prepare a Z Report using tables  J_1iexcdtl and J_1iexchdr. Use the LIFNR,DOCNO,EXYEAR,BUDAT,LIFNR  from table   J_1iexchdr  and  obtain fields  EXBAS,EXBED,RDOC1,ECS from table J_1iexchdr with the STATUS field having value only P.
    help me please
    thanks in advanced.

    Hi,
    U may follow the following steps.
    1. Delcare 1  internal table itab1 for hodling  all necessary data from table1
    2. Delcare 1  internal table itab2 for hodling  all necessary data from table2
    3. Delcare 1  internal table itab3 for hodling  all necessary data for outout purpose
    4. select allnecessary fields
       from table1
       Appending  table itab1
       WHERE Condition .
    if sy-subrc = 0.
    SELECT all necessary fields
    from table2
    Appending table itab2
    FOR ALL ENTRIES IN itab1
    WHERE lifnr = itab1-lifnr   and
           status = 'P' and
           rest of the condition.
    endif.
    5. you may move all the data into another internal table itab3  for out put purpose
    Cheers.

  • Create Big XML files ( extract ) from Relational Tables

    Experts: I need to create a big XML extract more than 5Gb , from relations tables using SQLX. I read the excellent FAQ given by MDrake in the following thread.
    https://forums.oracle.com/thread/418001
    Question
    1) Is it better to use XML schema, My XML output format is pretty much going to be static, so I can register an XML schema .
    2) Does Registering the XMLschema help with better memory management. I recall I used to get out of memory exception when I generated xml documents on oracle 10g using DBMS_XMLGEN.
    3) Can I generate this 5 Gb of XML file using oracle's default DOM parser?
    Thanks
    Kevin

    Hi Kevin,
    1) Is it better to use XML schema, My XML output format is pretty much going to be static, so I can register an XML schema .
    2) Does Registering the XMLschema help with better memory management. I recall I used to get out of memory exception when I generated xml documents on oracle 10g using DBMS_XMLGEN.
    No, an XML schema won't help for the generation.
    It is useful though if you're looking for the opposite task, i.e. loading an XML file into database tables.
    3) Can I generate this 5 Gb of XML file using oracle's default DOM parser?
    What is the default DOM parser ? Do you mean DBMS_XMLDOM APIs?
    Since you want to generate XML, there's not much to parse.
    Generally, using SQL/XML functions is the way to go.
    You may still hit some performance/memory issues while reaching such a size, especially with large XMLAgg aggregation context.
    If you do, you may switch to chunk generation instead. I've got some pretty good result with this approach and the parallel query feature.

  • How to create a service entry sheet based from the PO

    how to create a service entry sheet based from the PO
    Gurus,
    I am creating a service entry sheet from the PO but I am getting an error of u201CPlease maintain services or limits Message no. SE029- Diagnosis(You cannot enter data until the PO item has been maintained correctly) u201C
    The document type of the PO is standard NB, account assignment category is Q- (Proj make to order) and the item category is D(service). Then I am trying also create a PR using account assignment category is Q- (Proj make to order) and the item category is D(service) but still cannot proceed, a message asking me to enter a service entry number. What I know the process is create a PO(maybe based from PR) then post the GR then create a service entry sheet in ML81N but I cannot proceed. Just creating a PR or PO using those mentioned account assignment and item category and getting an error of need to enter a service entry sheet number.
    Please help.thanks!

    HI,
    Process for Creating Service Entry Sheet
    Transaction Code :    ML81N
    1)To open the respective Purchase Order, Click on the u2018Other Purchase Orderu2019, then enter the Purchase Order No.
    2)Click on the u2018Create Entry Sheetu2019 icon(3rd Icon on Top-Left)
    3)Give Short Text (e.g. R/A Bill No. 1) and top service entry sheet number also generated.
    4)Click u2018Service Selectionu2019 Icon on the Bottom of the Screen.
    5)For the 1st Time, when we are making Service Entry Sheet for a respective Purchase Order, we need to u201CAdopt Full Quantityu201D by clicking the Check box next to it, then Enter.  (*For the next time, no adoption is required, just continue)
    6)Select the respective Services by clicking on the Left Hand Side, then Click u2018Servicesu2019 (Adopt services) icon on the Top.
    7)Give the completed Quantity, then Click u2018Acceptu2019 icon(a green flag on the top)
    8)Save .
    9)Service Entry Sheet is SAVED and account posting made.
    Hope, it is useful for you,
    Regards,
    K.Rajendran

  • XML Data from Relational Tables

    Hi,
    My requirement is to pull data from relational tables into xml format and port it to the user (either as a file or allow the user to access it directly from their browser). What is the best way to accomplish this. Your suggestions are appreciated.
    thanks.

    Marco,
    Thanks for your reply, did try that , but I want the users to query this view also. Due to the nature of the xml structure I am getting the correct results. May be my xpath query is not right? My xml is as below:
    <node1 attribute-node1 = "somevalue1">
    <cnode1 attribute-cnode1 = "somevalue2">
    <cnode2 attribute-cnode2 = "somevalue3">
    <cnode3>somevalue4</cnode3>
    <cnode4>somevalue5</cnode4>
    </cnode2>
    <cnode2 attribute-cnode2 = "somevlaue6">
    <cnode3>somevalue6</cnode3>
    <cnode4>somevalue7</cnode4>
    </cnode2>
    </cnode1>
    </node1>
    and my requirement is like : the user wants to see only cnode2 with attribute value "somevalue3" (along with the rest of the xml) ie
    <node1 attribute-node1 = "somevalue1">
    <cnode1 attribute-cnode1 = "somevalue2">
    <cnode2 attribute-cnode2 = "somevalue3">
    <cnode3>somevalue4</cnode3>
    <cnode4>somevalue5</cnode4>
    </cnode2>
    </cnode1>
    </node1>
    Need the correct xpath query for this.
    Thanks

  • How to create simple scroll-bar table dashboard in Excel 2003?

    How to create simple scroll-bar table dashboard in Excel 2003?
    Pl mention from step 1 as I am new to this 

    Hi UltraDev,
    We discuss SQL Server PowerPivot for SharePoint related issue in this forum. In your case, I suggest you post the question in the following forum for better support:
    Excel IT Pro Discussion:
    http://social.technet.microsoft.com/Forums/office/en-US/home?forum=excel
    Regards,
    Elvis Long
    TechNet Community Support

  • How to create tree by database table

    hello sir ,
    my table is as follows,
    NAME LINK ID PID ROLLID
    User mgt. f?p=131:1: 1 - 10 ////root node///
    district 10 1 1 child
    Roles 16 14 4 child
    Users 11 10 1 child
    ROLLID is given from another table whis is (ROLES). i making tree by the combinations of id , pid, & roll id. by the roll id i can manage the tree to do not display specific nodes to specific users.
    ROLE table as :
    ROLE_ID NAME DESCRIPTION
    1 Administrator This is administrator
    2 Assistant Director -
    3 Assistant Statistical Officer -
    4 Data Entry Operator -
    but i think it is very complicated process . give me solution about it
    also i have to give my images to each node. how can i do that?

    You already have a thread going about this: Re: how to create tree by database table .
    Scott

  • How to get data from a table in a condition between twomonth

    hai friends
    I have a query that is i want to get data from a table based on a condition between two months in a format of char column
    Ex
    I have a column called from_month in the format of 'mon/yyyy'(already converted from date')
    then the second column is to_month in the same format 'mon/yyyy'
    now i wiil select from_month and to_month like
    from month jan/2009
    to month mar/2010
    how to use between of two months in the format of char.Please tell me how to get two different month between data.

    Hi,
    This may be of help.
    Remember Pointless has made a point ;) (worth millions)
    If possible , DO NOT store dates as strings or numbers.Let dates be dates.
    WITH dat AS
    (SELECT ' THIS IS JAN' x,to_char(to_date('01-JAN-2009','DD-MON-YYYY'),'mon/yyyy') y FROM dual UNION
    SELECT ' THIS IS FEB' x,to_char(to_date('01-FEB-2009','DD-MON-YYYY'),'mon/yyyy') y FROM dual UNION
    SELECT ' THIS IS MAR' x,to_char(to_date('01-MAR-2009','DD-MON-YYYY'),'mon/yyyy') y FROM dual UNION
    SELECT ' THIS IS APR' x,to_char(to_date('01-APR-2009','DD-MON-YYYY'),'mon/yyyy') y FROM dual UNION
    SELECT ' THIS IS MAY' x,to_char(to_date('01-MAY-2009','DD-MON-YYYY'),'mon/yyyy') y FROM dual UNION
    SELECT ' THIS IS JUN' x,to_char(to_date('01-JUN-2009','DD-MON-YYYY'),'mon/yyyy') y FROM dual UNION
    SELECT ' THIS IS JUL' x,to_char(to_date('01-JUL-2009','DD-MON-YYYY'),'mon/yyyy') y FROM dual UNION
    SELECT ' THIS IS AUG' x,to_char(to_date('01-AUG-2009','DD-MON-YYYY'),'mon/yyyy') y FROM dual UNION
    SELECT ' THIS IS SEP' x,to_char(to_date('01-SEP-2009','DD-MON-YYYY'),'mon/yyyy') y FROM dual UNION
    SELECT ' THIS IS OCT' x,to_char(to_date('01-OCT-2009','DD-MON-YYYY'),'mon/yyyy') y FROM dual UNION
    SELECT ' THIS IS NOV' x,to_char(to_date('01-NOV-2009','DD-MON-YYYY'),'mon/yyyy') y FROM dual)
    SELECT * FROM dat
    WHERE to_date(y,'mon/yyyy') BETWEEN to_date('01 jan 2009','dd mon yyyy') AND to_date('01 mar 2009','dd mon yyyy')Cheers!!!
    Bhushan

  • How to display data from a recordset based on data from another recordset

    How to display data from a recordset based on data from
    another recordset.
    What I would like to do is as follows:
    I have a fantasy hockey league website. For each team I have
    a team page (clubhouse) which is generated using PHP/MySQL. The one
    area I would like to clean up is the displaying of the divisional
    standings on the right side. As of right now, I use a URL variable
    (division = id2) to grab the needed data, which works ok. What I
    want to do is clean up the url abit.
    So far the url is
    clubhouse.php?team=Wings&id=DET&id2=Pacific, in the end all
    I want is clubhouse.php?team=Wings.
    I have a separate table, that has the teams entire
    information (full team name, short team, abbreviation, conference,
    division, etc. so I was thinking if I could somehow do this:
    Recordset Team Info is filtered using URL variable team
    (short team). Based on what team equals, it would then insert this
    variable into the Divisional Standings recordset.
    So example: If I type in clubhouse.php?team=Wings, the Team
    Info recordset would bring up the Pacific division. Then 'Pacific'
    would be inserted into the Divisional Standings recordset to
    display the Pacific Division Standings.
    Basically I want this
    SELECT *
    FROM standings
    WHERE division = <teaminfo.division>
    ORDER BY pts DESC
    Could someone help me, thank you.

    Assuming two tables- teamtable and standings:
    teamtable - which has entire info about the team and has a
    field called
    "div" which has the division name say "pacific" and you want
    to use this
    name to get corresponding details from the other table.
    standings - which has a field called "division" which you
    want to use to
    give the standings
    SELECT * FROM standings AS st, teamtable AS t
    WHERE st.division = t.div
    ORDER BY pts DESC
    Instead of * you could be specific on what fields you want to
    select ..
    something like
    SELECT st.id AS id, st.position AS position, st.teamname AS
    team
    You cannot lose until you give up !!!
    "Leburn98" <[email protected]> wrote in
    message
    news:[email protected]...
    > How to display data from a recordset based on data from
    another recordset.
    >
    > What I would like to do is as follows:
    >
    > I have a fantasy hockey league website. For each team I
    have a team page
    > (clubhouse) which is generated using PHP/MySQL. The one
    area I would like
    > to
    > clean up is the displaying of the divisional standings
    on the right side.
    > As of
    > right now, I use a URL variable (division = id2) to grab
    the needed data,
    > which
    > works ok. What I want to do is clean up the url abit.
    >
    > So far the url is
    clubhouse.php?team=Wings&id=DET&id2=Pacific, in the end
    > all
    > I want is clubhouse.php?team=Wings.
    >
    > I have a separate table, that has the teams entire
    information (full team
    > name, short team, abbreviation, conference, division,
    etc. so I was
    > thinking if
    > I could somehow do this:
    >
    > Recordset Team Info is filtered using URL variable team
    (short team).
    > Based on
    > what team equals, it would then insert this variable
    into the Divisional
    > Standings recordset.
    >
    > So example: If I type in clubhouse.php?team=Wings, the
    Team Info recordset
    > would bring up the Pacific division. Then 'Pacific'
    would be inserted into
    > the
    > Divisional Standings recordset to display the Pacific
    Division Standings.
    >
    > Basically I want this
    >
    > SELECT *
    > FROM standings
    > WHERE division = <teaminfo.division>
    > ORDER BY pts DESC
    >
    > Could someone help me, thank you.
    >

Maybe you are looking for