Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
![]() |
![]() |
Home -> Community -> Usenet -> c.d.o.server -> ORA-19209 when performing XML validation against a registered XSD
Hello. I want to use PL/SQL to generate some XML and then validate it
against a registered XSD.
This is failing when I use XMLFORMAT.CREATEFORMAT, specifying my XSD. The error is ORA-19209: invalid or unsupported formatting argument.
Info:
db version = 10.1.0.4.0
user has xdbadmin and resource privileges granted
create tables and data:
create table TMP_RH_CLOB
(
XML_STRING CLOB
);
create table TMP_RH_CRM_XML
(
CONTACT NUMBER(8),
TRANSACTION NUMBER(10),
CSA VARCHAR2(12), OPEN_DAT DATE, CLOSED_DAT DATE, OPEN_TIM DATE, CLOSED_TIM DATE, EMPLOYEE_TRANS VARCHAR2(12), STATUS VARCHAR2(1), AGREEMENT_NO VARCHAR2(8), DOCKET_NUM NUMBER(10), PRODUCT_DESCR VARCHAR2(40), PART VARCHAR2(20), ORDER_QTY NUMBER(12), RETAIL_AMT NUMBER, SALE_AMT NUMBER, ACCOUNTNO VARCHAR2(40), SORTCODE VARCHAR2(40), ACCOUNTNAME VARCHAR2(40), BANK_NAME VARCHAR2(60), FEATURE_TEXT VARCHAR2(450), IMEI VARCHAR2(25)
insert into TMP_RH_CRM_XML (CONTACT, TRANSACTION, CSA, OPEN_DAT, CLOSED_DAT, OPEN_TIM, CLOSED_TIM, EMPLOYEE_TRANS, STATUS, AGREEMENT_NO, DOCKET_NUM, PRODUCT_DESCR, PART, ORDER_QTY, RETAIL_AMT, SALE_AMT, ACCOUNTNO, SORTCODE, ACCOUNTNAME, BANK_NAME, FEATURE_TEXT, IMEI)
values (99906376, 3674381, 'MENONV', to_date('19-10-2005', 'dd-mm-yyyy'), to_date('19-10-2005', 'dd-mm-yyyy'), to_date('01-01-1900 11:31:42', 'dd-mm-yyyy hh24:mi:ss'), to_date('01-01-1900 16:42:16','dd-mm-yyyy hh24:mi:ss'), 'MENONV', 'C', null, 9366490, '6 Months 1/2 Price line rental', 'MOTV3', 1, 0, 0, '78945612', '938076', 'J MAX', 'FIRST TRUST', 'Baker Street', '240752407808987'); insert into TMP_RH_CRM_XML (CONTACT, TRANSACTION, CSA, OPEN_DAT, CLOSED_DAT, OPEN_TIM, CLOSED_TIM, EMPLOYEE_TRANS, STATUS, AGREEMENT_NO, DOCKET_NUM, PRODUCT_DESCR, PART, ORDER_QTY, RETAIL_AMT, SALE_AMT, ACCOUNTNO, SORTCODE, ACCOUNTNAME, BANK_NAME, FEATURE_TEXT, IMEI)
values (99906376, 3674381, 'MENONV', to_date('19-10-2005', 'dd-mm-yyyy'), to_date('19-10-2005', 'dd-mm-yyyy'), to_date('01-01-1900 11:31:42', 'dd-mm-yyyy hh24:mi:ss'), to_date('01-01-1900 16:42:16','dd-mm-yyyy hh24:mi:ss'), 'MENONV', 'C', null, 9366490, '6 Months 1/2 Price line rental', 'MOTV3', 1, 0, 0, '78945612', '938076', 'J MAX', 'FIRST TRUST', 'NO', '240752407808987'); insert into TMP_RH_CRM_XML (CONTACT, TRANSACTION, CSA, OPEN_DAT, CLOSED_DAT, OPEN_TIM, CLOSED_TIM, EMPLOYEE_TRANS, STATUS, AGREEMENT_NO, DOCKET_NUM, PRODUCT_DESCR, PART, ORDER_QTY, RETAIL_AMT, SALE_AMT, ACCOUNTNO, SORTCODE, ACCOUNTNAME, BANK_NAME, FEATURE_TEXT, IMEI)
values (99906376, 3674381, 'MENONV', to_date('19-10-2005', 'dd-mm-yyyy'), to_date('19-10-2005', 'dd-mm-yyyy'), to_date('01-01-1900 11:31:42', 'dd-mm-yyyy hh24:mi:ss'), to_date('01-01-1900 16:42:16','dd-mm-yyyy hh24:mi:ss'), 'MENONV', 'C', null, 9366490, '6 Months 1/2 Price line rental', 'MOTV3', 1, 0, 0, '78945612', '938076', 'J MAX', 'FIRST TRUST', 'Bulk Dealer', '240752407808987'); insert into TMP_RH_CRM_XML (CONTACT, TRANSACTION, CSA, OPEN_DAT, CLOSED_DAT, OPEN_TIM, CLOSED_TIM, EMPLOYEE_TRANS, STATUS, AGREEMENT_NO, DOCKET_NUM, PRODUCT_DESCR, PART, ORDER_QTY, RETAIL_AMT, SALE_AMT, ACCOUNTNO, SORTCODE, ACCOUNTNAME, BANK_NAME, FEATURE_TEXT, IMEI)
values (99906376, 3674381, 'MENONV', to_date('19-10-2005', 'dd-mm-yyyy'), to_date('19-10-2005', 'dd-mm-yyyy'), to_date('01-01-1900 11:31:42', 'dd-mm-yyyy hh24:mi:ss'), to_date('01-01-1900 16:42:16','dd-mm-yyyy hh24:mi:ss'), 'MENONV', 'C', null, 9366490, '6 Months 1/2 Price line rental', 'MOTV3', 1, 0, 0, '78945612', '938076', 'J MAX', 'FIRST TRUST', 'OBP LifeLine Sales process, inbound telephone required', '240752407808987');
values (99906376, 3674381, 'MENONV', to_date('19-10-2005', 'dd-mm-yyyy'), to_date('19-10-2005', 'dd-mm-yyyy'), to_date('01-01-1900 11:31:42', 'dd-mm-yyyy hh24:mi:ss'), to_date('01-01-1900 16:42:16','dd-mm-yyyy hh24:mi:ss'), 'MENONV', 'C', null, 9366490, '6 Months 1/2 Price line rental', 'MOTV3', 1, 0, 0, '78945612', '938076', 'J MAX', 'FIRST TRUST', 'RETAIL', '240752407808987'); insert into TMP_RH_CRM_XML (CONTACT, TRANSACTION, CSA, OPEN_DAT, CLOSED_DAT, OPEN_TIM, CLOSED_TIM, EMPLOYEE_TRANS, STATUS, AGREEMENT_NO, DOCKET_NUM, PRODUCT_DESCR, PART, ORDER_QTY, RETAIL_AMT, SALE_AMT, ACCOUNTNO, SORTCODE, ACCOUNTNAME, BANK_NAME, FEATURE_TEXT, IMEI)
values (99906376, 3674381, 'MENONV', to_date('19-10-2005', 'dd-mm-yyyy'), to_date('19-10-2005', 'dd-mm-yyyy'), to_date('01-01-1900 11:31:42', 'dd-mm-yyyy hh24:mi:ss'), to_date('01-01-1900 16:42:16', 'dd-mm-yyyy hh24:mi:ss'), 'MENONV', 'C', null, 9366490, '6 Months 1/2Price line rental', 'MOTV3', 1, 0, 0, '78945612', '938076', 'J MAX', 'FIRST TRUST', 'Premier', '240752407808987'); insert into TMP_RH_CRM_XML (CONTACT, TRANSACTION, CSA, OPEN_DAT, CLOSED_DAT, OPEN_TIM, CLOSED_TIM, EMPLOYEE_TRANS, STATUS, AGREEMENT_NO, DOCKET_NUM, PRODUCT_DESCR, PART, ORDER_QTY, RETAIL_AMT, SALE_AMT, ACCOUNTNO, SORTCODE, ACCOUNTNAME, BANK_NAME, FEATURE_TEXT, IMEI)
values (99906376, 3674381, 'MENONV', to_date('19-10-2005', 'dd-mm-yyyy'), to_date('19-10-2005', 'dd-mm-yyyy'), to_date('01-01-1900 11:31:42', 'dd-mm-yyyy hh24:mi:ss'), to_date('01-01-1900 16:42:16', 'dd-mm-yyyy hh24:mi:ss'), 'MENONV', 'C', null, 9366490, '6 Months 1/2Price line rental', 'MOTV3', 1, 0, 0, '78945612', '938076', 'J MAX', 'FIRST TRUST', 'On Line Student Mobile', '240752407808987');
Then I created directories as follows:
DECLARE
v_return BOOLEAN;
BEGIN
v_return := dbms_xdb.createFolder('/home/'); v_return := dbms_xdb.createFolder('/home/DEV/'); v_return := dbms_xdb.createFolder('/home/DEV/xsd/'); v_return := dbms_xdb.createFolder('/home/DEV/messages/');COMMIT;
DECLARE
lvXsd CONSTANT VARCHAR2(32000) := '<?xml version="1.0"
encoding="UTF-8" standalone="yes"?>
<!--W3C Schema generated by XMLSpy v2006 rel. 3 sp1
(http://www.altova.com)-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:element name="TransInfo"> <xs:complexType>
<xs:sequence>
<xs:element name="PIE_ERROR" type="PIE_ERRORType" minOccurs="0"/> <xs:element name="Transaction" type="TransactionType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType> </xs:element> <xs:complexType name="PIE_ERRORType"> <xs:sequence>
<xs:element ref="ERROR_CODE"/>
<xs:element ref="DESCRIPTION"/>
</xs:sequence> </xs:complexType> <xs:element name="ERROR_CODE"> <xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="LEAD NUMBER 12345 IS INVALID"/>
</xs:restriction>
</xs:simpleType> </xs:element> <xs:element name="DESCRIPTION"> <xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="0001"/>
</xs:restriction>
</xs:simpleType> </xs:element> <xs:complexType name="TransactionType"> <xs:sequence>
<xs:element ref="TRANSACTION_NUMBER"/>
<xs:element ref="TRANSACTION_STATUS"/>
<xs:element ref="CONTACT_ID"/>
<xs:element ref="INVOICE_NUMBER"/>
<xs:element ref="CSA"/>
<xs:element ref="OPEN_DATETIME"/>
<xs:element ref="CLOSED_DATETIME"/>
<xs:element name="Orderline" type="OrderlineType"
maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> <xs:element name="TRANSACTION_NUMBER"> <xs:simpleType>
<xs:restriction base="xs:int">
<xs:enumeration value="3455229"/> <xs:enumeration value="3455230"/>
</xs:restriction>
</xs:simpleType> </xs:element> <xs:element name="TRANSACTION_STATUS"> <xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="C"/>
</xs:restriction>
</xs:simpleType> </xs:element> <xs:element name="CONTACT_ID"> <xs:simpleType>
<xs:restriction base="xs:int">
<xs:enumeration value="111"/> <xs:enumeration value="222"/>
</xs:restriction>
</xs:simpleType> </xs:element> <xs:element name="INVOICE_NUMBER"> <xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="123456789"/> <xs:enumeration value="987654321"/>
</xs:restriction>
</xs:simpleType> </xs:element> <xs:element name="CHANNEL"> <xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Test 1"/> <xs:enumeration value="Test 2"/>
</xs:restriction>
</xs:simpleType> </xs:element> <xs:element name="CSA"> <xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="SEARLEA"/> <xs:enumeration value="SILVAJ"/>
</xs:restriction>
</xs:simpleType> </xs:element> <xs:element name="OPEN_DATETIME"> <xs:simpleType>
<xs:restriction base="xs:dateTime">
<xs:enumeration value="2001-10-26T20:32:52"/> <xs:enumeration value="2004-12-06T10:23:25"/>
</xs:restriction>
</xs:simpleType> </xs:element> <xs:element name="CLOSED_DATETIME"> <xs:simpleType>
<xs:restriction base="xs:dateTime">
<xs:enumeration value="2001-10-26T21:32:52"/> <xs:enumeration value="2004-12-06T10:23:25"/>
</xs:restriction>
</xs:simpleType> </xs:element> <xs:complexType name="OrderlineType"> <xs:sequence>
<xs:element ref="ORDER_QTY"/>
<xs:element ref="RETAIL_AMT"/>
<xs:element ref="SALE_AMT"/>
<xs:element ref="PRODUCT_DESCR"/>
<xs:element ref="PART"/>
<xs:element ref="IMEI"/>
<xs:element name="BankDetails" type="BankDetailsType"/>
</xs:sequence> </xs:complexType> <xs:element name="ORDER_QTY"> <xs:simpleType>
<xs:restriction base="xs:int">
<xs:enumeration value="1"/> <xs:enumeration value="3"/>
</xs:restriction>
</xs:simpleType> </xs:element> <xs:element name="RETAIL_AMT"> <xs:simpleType>
<xs:restriction base="xs:decimal">
<xs:enumeration value="45.67"/> <xs:enumeration value="54.76"/>
</xs:restriction>
</xs:simpleType> </xs:element> <xs:element name="SALE_AMT"> <xs:simpleType>
<xs:restriction base="xs:decimal">
<xs:enumeration value="45.67"/> <xs:enumeration value="54.76"/>
</xs:restriction>
</xs:simpleType> </xs:element> <xs:element name="PRODUCT_DESCR"> <xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Product test 2"/> <xs:enumeration value="Vodafone Nokia 6230 Pack"/>
</xs:restriction>
</xs:simpleType> </xs:element> <xs:element name="PART"> <xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="6806"/> <xs:enumeration value="8606"/>
</xs:restriction>
</xs:simpleType> </xs:element> <xs:element name="IMEI"> <xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="099000000000001"/> <xs:enumeration value="09900078900001"/>
</xs:restriction>
</xs:simpleType> </xs:element> <xs:complexType name="BankDetailsType"> <xs:sequence>
<xs:element ref="BANK_NAME"/>
<xs:element ref="ACCOUNT_NAME"/>
<xs:element ref="ACCOUNT_NUMBER"/>
<xs:element ref="SORT_CODE"/>
</xs:sequence> </xs:complexType> <xs:element name="BANK_NAME"> <xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="HSBC"/> <xs:enumeration value="LLOYDS"/>
</xs:restriction>
</xs:simpleType> </xs:element> <xs:element name="ACCOUNT_NAME"> <xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="MR A SEARLE"/> <xs:enumeration value="MR J SILVA"/>
</xs:restriction>
</xs:simpleType> </xs:element> <xs:element name="ACCOUNT_NUMBER"> <xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="87698789"/> <xs:enumeration value="89769082"/>
</xs:restriction>
</xs:simpleType> </xs:element> <xs:element name="SORT_CODE"> <xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="100928"/> <xs:enumeration value="123346"/>
</xs:restriction>
</xs:simpleType> </xs:element>
BEGIN
dbms_xmlschema.registerSchema(schemaurl =>
'http://aix53:8080/home/DEV/xsd/test_1.xsd'
,schemaDoc => lvXsd );
My XML generation/validation script is here:
SET SERVEROUTPUT ON SIZE 1000000
SET LONG 50000
SET HEAD OFF
SET PAGES 0
SET TIMING ON
DECLARE
v_xml_clob XMLTYPE; v_empty_xml_clob CLOB; v_pr_found BOOLEAN; v_valid_xml VARCHAR2(10);
BEGIN EXECUTE IMMEDIATE 'TRUNCATE TABLE tmp_rh_clob'; v_pr_found := FALSE;
v_pr_found := TRUE; BEGIN SELECT SYS_XMLAGG( XMLELEMENT("Transaction" ,XMLFOREST(rec_test.transaction "transaction" ,rec_test.status "transaction_status" ,rec_test.contact"contact_id"
,rec_test.docket_num "invoice_number"
,rec_test.csa"csa"
,TO_CHAR(rec_test.open_dat, 'YYYY-MM-YY') || 'T' || TO_CHAR(rec_test.open_tim, 'HH24:MI:SS') "open_datetime"
,TO_CHAR(rec_test.closed_dat, 'YYYY-MM-YY') || 'T' || TO_CHAR(rec_test.closed_tim, 'HH24:MI:SS') "closed_datetime"
,XMLFOREST(rec_test.order_qty "order_qty"
,rec_test.retail_amt "retail_amt"
,rec_test.sale_amt "sale_amt"
,rec_test.product_descr "product_descr"
,rec_test.part "part"
,rec_test.imei "imei"
,XMLFOREST(rec_test.bank_name "bank_name"
,rec_test.accountname "account_name"
) "BankDetails"
)"Orderline"
) ) ,XMLFORMAT.CREATEFORMAT('TransInfo' ,'USE GIVENSCHEMA' ,'/home/harilalr/sample_schema_29082006.xsd'
-- ,NULL -- ,NULL -- ,NULL ) )--.GETCLOBVAL() INTO v_xml_clob FROM tmp_rh_crm_xml rec_test WHERE ROWNUM < 4; v_xml_clob.schemavalidate(); INSERT INTO tmp_rh_clob (xml_string ) VALUES (TO_CLOB(v_xml_clob) ); COMMIT; END; IF NOT(v_pr_found) THEN RAISE_APPLICATION_ERROR (-20002 ,'No data found' );
ROLLBACK; RAISE;
END;
/
Can anyone see anything that's obviously wrong with this? I imagine it's the fact that the registration probably hasn't completed successfully, but don't know this for sure. The error message ORA-19209 isn't particularly useful.
Any comments/suggestions on a solution very much appreciated.
Thanks,
Ray.
Received on Fri Sep 01 2006 - 09:19:27 CDT
![]() |
![]() |