Handling of xml data within Oracle 9/10 and sql Server 2005

O

Oriane

Hi there,

I would like to know the best way to handle Xml data stored on Oracle and
Sql Server 2005 using XQuery/XPath and AdoNet. Ideally, the C# code should
not be different for Oracle and Sql Server. Any hint ?

Regards
 
S

sloan

Sql Server 2005/2000 has a OPENXML statement.

When I used Oracle 9 (while back), I was very disappointed in its xml
capabilities.


First question:

Are you pushing xml into the db, or reading it out?
It looks like reading it out, but wanted to make sure.
 
O

Oriane

Hi Sloan,
sloan said:
Sql Server 2005/2000 has a OPENXML statement.

When I used Oracle 9 (while back), I was very disappointed in its xml
capabilities. And what about Oracle 10g ?

First question:

Are you pushing xml into the db, or reading it out?
Reading and writing, but mostly reading...
 
S

sloan

Oracle 10? No idea.


Here is what I found.


I now remember how much I hated Oracle XML.

Good luck. I have no more I can offer beyond this.




/* Actual Logic of This procedure */

--this is just a check to make sure it can be cast as a XMLTYPE document
SELECT sys.xmltype.createxml(in_errorlogxml) INTO xmlvar FROM dual;
convertedBlobToXMLType := XMLTYPE(in_errorlogxml);
--

SELECT SEQ_ErrorLogID.NEXTVAL INTO ErrorID FROM DUAL;


--There is an issue with referring to the XML directly (as a cast clob
object)
--This is a workaround ... by putting the value into a temp database
--and then referring to that value, it will work.
delete from XMLTempHolderTable;
commit;
insert into XMLTempHolderTable values
(ErrorID,convertedBlobToXMLType);--in_errorlogxml);
commit;


INSERT INTO ERRORLOG (
ErrorID,
MachineName,
TimeStampValue,
FullName,
AppDomainName,
ThreadIdentity,
WindowsIdentity,
ExceptionType,
Message,
TargetSite,
Source,
StackTrace,
EntryDateTime
)
SELECT ErrorID,
extractValue(value(d),'ExceptionInformation/AdditionalInformationProperty/@ExceptionManager.MachineName'),
extractValue(value(d),'ExceptionInformation/AdditionalInformationProperty/@ExceptionManager.TimeStamp'),
extractValue(value(d),'ExceptionInformation/AdditionalInformationProperty/@ExceptionManager.FullName'),
extractValue(value(d),'ExceptionInformation/AdditionalInformationProperty/@ExceptionManager.AppDomainName'),
extractValue(value(d),'ExceptionInformation/AdditionalInformationProperty/@ExceptionManager.ThreadIdentity'),
extractValue(value(d),'ExceptionInformation/AdditionalInformationProperty/@ExceptionManager.WindowsIdentity'),
extractValue(value(d),'/ExceptionInformation/Exception/@ExceptionType'),
extractValue(value(d),'/ExceptionInformation/Exception/@Message'),
extractValue(value(d),'/ExceptionInformation/Exception/@TargetSite'),
extractValue(value(d),'/ExceptionInformation/Exception/@Source'),
extractValue(value(d),'/ExceptionInformation/Exception/StackTrace'),
sysdate
--FROM table (xmlsequence(extract(XMLTYPE.createXML(in_errorlogxml),
'/ExceptionInformation'))) d; --Does not work
--FROM XMLTempHolderTable tmp,table
(xmlsequence(extract(xmltype(tmp.XMLValue), '/ExceptionInformation')))
; --if the XMLValue is a clob
FROM XMLTempHolderTable tmp,
table (xmlsequence(extract((tmp.XMLValue),
'/ExceptionInformation'))) d--; --if the XMLValue is a XMLType
WHERE tmp.XMLID = ErrorID;

--Here's the deal. The second and third "FROM" is reading the value from
an intermediate table
--and it works
--the first FROM is trying to read the variable outright, and it fails
????
--For some reason, the code cannot refer to the cast clob (as xmltype)
directly
--but if one puts it into an intermediate table, and then read it, it
works??????

COMMIT;





















++++++++++++++++++++++++++=





DROP TABLE ERRORLOG
/


CREATE TABLE ERRORLOG (



/*

The below table definition maps to the information being provided by the
Microsoft.ApplicationBlocks.ExceptionManagement XMLPublisher

Here is a sample xml document.
<ExceptionInformation>
<AdditionalInformationProperty
ExceptionManager.MachineName="CelineDionXP1"
ExceptionManager.TimeStamp="11/8/2002 1:13:48 PM"
ExceptionManager.FullName="Microsoft.ApplicationBlocks.ExceptionManagement,
Version=1.0.1769.18782, Culture=neutral, PublicKeyToken=null"
ExceptionManager.AppDomainName="ExceptionManagementQuickStartSamples.exe"
ExceptionManager.ThreadIdentity=""
ExceptionManager.WindowsIdentity="jean claude van damme" />

<Exception ExceptionType="System.DivideByZeroException"
Message="Attempted to divide by zero."
TargetSite="Void btnLogon_Click(System.Object, System.EventArgs)"
Source="ExceptionManagementQuickStartSamples">
<StackTrace> at
ExceptionManagementQuickStartSamples.Form1.btnLogon_Click(Object sender,
EventArgs e) in c:\program files\microsoft application blocks for
..net\exception
management\code\cs\exceptionmanagementquickstartsamples\form1.cs:line
171</StackTrace>
</Exception>
</ExceptionInformation>

*/


ErrorID int not null primary key ,

MachineName varchar2(128) null ,
TimeStampValue varchar2(64) null ,
FullName varchar2(128) null ,
AppDomainName varchar2(128) null ,
ThreadIdentity varchar2(128) null ,
WindowsIdentity varchar2(128) null ,

StackTrace varchar2(4000) null ,
ExceptionType varchar2(128) null ,
Message varchar2(640) not null ,
TargetSite varchar2(128) null ,
Source varchar2(128) null ,

EntryDateTime date default sysdate not null

)
/



DROP SEQUENCE SEQ_ErrorLog
/

CREATE SEQUENCE SEQ_ErrorLog
start with 1
increment by 1
nomaxvalue
/



DROP TABLE XMLTempHolderTable
/



CREATE TABLE XMLTempHolderTable (

/*
There is an issue reading a clob as an XMLTYPE directly
This is a temporary workaround, this table should never have more than 1
record in it
and is just a working table.
*/

XMLID int not null primary key ,
XMLValue XMLTYPE --CLOB
)
/


COMMIT
/
 
O

Oriane

sloan said:
Oracle 10? No idea.


Here is what I found.


I now remember how much I hated Oracle XML.

Good luck. I have no more I can offer beyond this.
Ok thanks
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top