Ankit Gupta, June 09, 2011 - 11:16 am UTC
Hi Tom,
Thank you for your esteemed guidance.
I have found another solution which may prove to be beneficial for others as well.
Please review the below query :
select dbms_xmlgen.getxml('select * from <tablename>') xml from dual;
This query gave me the complete XML structure output of the table along with its data and this was exactly what i was looking for.
Kindly provide your feedback on the same.
Best Regards,
Ankit
June 09, 2011 - 12:12 pm UTC
That's why I pointed you to that chapter - there are *dozens* if not *hundreds* of ways.
The two approaches generate different output - use whichever one makes the most sense for you.
Ankit Gupta, June 10, 2011 - 1:16 am UTC
While executing the above query through SQLPLUS in unix environment i got incomplete output. I have attached the output for your reference :
SQL> select dbms_xmlgen.getxml('select * from tt_state_config') xml from dual;
XML
--------------------------------------------------------------------------------
<?xml version="1.0"?>
<ROWSET>
<ROW>
<REQUEST_ID>000000000000001</REQUEST_ID>
Interestingly i am getting the complete output when executing the same query in SQL Developer :
<?xml version="1.0"?>
<ROWSET>
<ROW>
<REQUEST_ID>000000000000001</REQUEST_ID>
<SUBMITTER>cj</SUBMITTER>
<CREATE_DATE>985700966</CREATE_DATE>
<LAST_MODIFIED_BY>cj</LAST_MODIFIED_BY>
<MODIFIED_DATE>999182192</MODIFIED_DATE>
<SYS_STATUS>0</SYS_STATUS>
<SHORT_DESCRIPTION>x</SHORT_DESCRIPTION>
<STATE>Queued</STATE>
<STATE_ID>30</STATE_ID>
<SORT_ORDER>3</SORT_ORDER>
</ROW>
<ROW>
<REQUEST_ID>000000000000002</REQUEST_ID>
<SUBMITTER>cj</SUBMITTER>
<CREATE_DATE>985700976</CREATE_DATE>
<LAST_MODIFIED_BY>cj</LAST_MODIFIED_BY>
<MODIFIED_DATE>999182055</MODIFIED_DATE>
<SYS_STATUS>0</SYS_STATUS>
<SHORT_DESCRIPTION>x</SHORT_DESCRIPTION>
<STATE>Open</STATE>
<STATE_ID>40</STATE_ID>
<SORT_ORDER>4</SORT_ORDER>
</ROW>
<ROW>
<REQUEST_ID>000000000000003</REQUEST_ID>
<SUBMITTER>cj</SUBMITTER>
<CREATE_DATE>985700986</CREATE_DATE>
<LAST_MODIFIED_BY>cj</LAST_MODIFIED_BY>
<MODIFIED_DATE>999182050</MODIFIED_DATE>
<SYS_STATUS>0</SYS_STATUS>
<SHORT_DESCRIPTION>x</SHORT_DESCRIPTION>
<STATE>Deferred</STATE>
<STATE_ID>50</STATE_ID>
<SORT_ORDER>5</SORT_ORDER>
</ROW>
<ROW>
<REQUEST_ID>000000000000004</REQUEST_ID>
<SUBMITTER>cj</SUBMITTER>
<CREATE_DATE>985700995</CREATE_DATE>
<LAST_MODIFIED_BY>cj</LAST_MODIFIED_BY>
<MODIFIED_DATE>999182045</MODIFIED_DATE>
<SYS_STATUS>0</SYS_STATUS>
<SHORT_DESCRIPTION>x</SHORT_DESCRIPTION>
<STATE>Cleared</STATE>
<STATE_ID>60</STATE_ID>
<SORT_ORDER>6</SORT_ORDER>
</ROW>
<ROW>
<REQUEST_ID>000000000000005</REQUEST_ID>
<SUBMITTER>cj</SUBMITTER>
<CREATE_DATE>985701008</CREATE_DATE>
<LAST_MODIFIED_BY>cj</LAST_MODIFIED_BY>
<MODIFIED_DATE>999182028</MODIFIED_DATE>
<SYS_STATUS>0</SYS_STATUS>
<SHORT_DESCRIPTION>x</SHORT_DESCRIPTION>
<STATE>Closed</STATE>
<STATE_ID>70</STATE_ID>
<SORT_ORDER>7</SORT_ORDER>
</ROW>
<ROW>
<REQUEST_ID>000000000000006</REQUEST_ID>
<SUBMITTER>cj</SUBMITTER>
<CREATE_DATE>999182215</CREATE_DATE>
<LAST_MODIFIED_BY>cj</LAST_MODIFIED_BY>
<MODIFIED_DATE>999182215</MODIFIED_DATE>
<SYS_STATUS>0</SYS_STATUS>
<SHORT_DESCRIPTION>x</SHORT_DESCRIPTION>
<STATE>New</STATE>
<STATE_ID>10</STATE_ID>
<SORT_ORDER>1</SORT_ORDER>
</ROW>
</ROWSET>
I beleive some parameter needs to be set in unix environment before running the query.
Kindly advise.
Best Regards,
Ankit
June 10, 2011 - 8:00 am UTC
SQL> set long nnnnnnnnnnnnnnn
where nnnnnnnnnnnnn is the size sqlplus should print of a lob/long variable. Default is pretty small
@Ankit
Narendra, June 10, 2011 - 4:57 am UTC
Ankit,
In SQL*plus, you need to issue following
set long 100000
and then execute your query, which should produce the expected results.
Ankit Gupta, June 13, 2011 - 4:27 am UTC
Thanks Tom & Narendra,
I was able to successfully create and XML file.
I have to insert this xml into a table with same structure and I am using the following procedure :
create or replace procedure insProc(xmlDoc IN CLOB, tableName IN VARCHAR2) is
insCtx DBMS_XMLSave.ctxType;
rows number;
begin
insCtx := DBMS_XMLSave.newContext(tableName);
rows := DBMS_XMLSave.insertXML(insCtx,xmlDoc);
DBMS_XMLSave.closeContext(insCtx);
end;
/
I am executing the statement with the following statement :
exec insProc('ttstateconfig.xml', 'test1');
where ttstateconfig.xml resides in the same directory where SQLPLUS session was initiated.
AND test1 has the same structure of table tt_state_config :
SQL> desc test1;
Name Null? Type
----------------------------------------- -------- ----------------------------
REQUEST_ID NOT NULL VARCHAR2(15)
SUBMITTER VARCHAR2(254)
CREATE_DATE NOT NULL NUMBER(15)
ASSIGNED_TO VARCHAR2(254)
LAST_MODIFIED_BY NOT NULL VARCHAR2(254)
MODIFIED_DATE NOT NULL NUMBER(15)
SYS_STATUS NOT NULL NUMBER(15)
SHORT_DESCRIPTION NOT NULL VARCHAR2(1)
ASSIGNEE_GROUP VARCHAR2(30)
STATE VARCHAR2(30)
STATE_ID NUMBER(15)
SORT_ORDER NUMBER(15)
DESCRIPTION VARCHAR2(255)
When i execute the procedure i am getting the following error :
SQL> exec insProc('ttstateconfig.xml', 'test1');
BEGIN insProc('ttstateconfig.xml', 'test1'); END;
*
ERROR at line 1:
ORA-29532: Java call terminated by uncaught Java exception:
oracle.xml.sql.OracleXMLSQLException: Start of root element expected.
ORA-06512: at "SYS.DBMS_XMLSAVE", line 115
ORA-06512: at "ARADMIN.INSPROC", line 6
ORA-06512: at line 1
Interestingly if i use XMLStore in place of XMLSave in the procedure :
create or replace procedure insProc(xmlDoc IN CLOB, tableName IN VARCHAR2) is
insCtx DBMS_XMLStore.ctxType;
rows number;
begin
insCtx := DBMS_XMLStore.newContext(tableName);
rows := DBMS_XMLStore.insertXML(insCtx,xmlDoc);
DBMS_XMLStore.closeContext(insCtx);
end;
/
I get a different ouput with errors :
SQL> exec insProc('ttstateconfig.xml', 'test1');
BEGIN insProc('ttstateconfig.xml', 'test1'); END;
*
ERROR at line 1:
ORA-31011: XML parsing failed
ORA-19202: Error occurred in XML processing
LPX-00210: expected '<' instead of 't'
ORA-06512: at "SYS.DBMS_XMLSTORE", line 78
ORA-06512: at "ARADMIN.INSPROC", line 6
ORA-06512: at line 1
Kindly advise on how this problem can be resolved.
Best Regards,
Ankit Gupta
The link in this answer is no longer valid
Topher Eliot, June 30, 2017 - 6:45 pm UTC
July 01, 2017 - 2:55 am UTC