Skip to Main Content

Database Software

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Inserting ADO.NET DataTable Converted To XML Using XMLTYPE

DanCodiMar 23 2014 — edited Mar 24 2014

I have a Asp.NET Web Application talking to an 10G database using ODP.NET Provider. I have converted a DataTable to XML and am passing it to a stored procedure as follows but when debugging in SQLdeveloper it never steps into the for loop to insert the rows. Any help would be greatly appreciated.

sXML="<DocumentElement> 

<ORDERSETDIAGNOSIS>   

<ORDER_SET_DIAG_ID>0</ORDER_SET_DIAG_ID>   

<ORDER_SET_ID>0</ORDER_SET_ID>   

<DIAGNOSIS_ID>10357</DIAGNOSIS_ID>   

<DESCRIPTION>Knee pain, left anterior(719.46,M25.562)</DESCRIPTION>   

<LEXICAL_CODE>21647775</LEXICAL_CODE>   

<IMO_DESCRIPTION>Knee pain, left anterior</IMO_DESCRIPTION>   

<ICD9_CODE>719.46</ICD9_CODE>   

<ICD10_CODE>M25.562</ICD10_CODE>   

<SNOMED_CODE>239733006</SNOMED_CODE> 

</ORDERSETDIAGNOSIS>

</DocumentElement>"

dbObj.Parameters.Add(Ora_db.CreateOracleIDParam("IN_ORDER_SET_ID", OrderSetId))

dbObj.Parameters.Add(Ora_db.CreateOracleIDParam("IN_MODIFIED_BY", ModifiedBy))

dbObj.Parameters.Add(Ora_db.CreateOracleVarcharParam("IN_DIAGNOSISXML", sXML, 4000))

dbObj.CreateCommand(CTSettings.OrdersPackageDBName & ".ADDORDERSETDIAGNOSIS")

intRetValue = dbObj.ExecCommandAffectedRows()

PROCEDURE ADDORDERSETDIAGNOSIS(
  IN_ORDER_SET_ID IN ORDER_SET.ORDER_SET_ID%TYPE DEFAULT NULL,
    IN_MODIFIED_BY IN ORDER_SET.MODIFIED_BY%TYPE DEFAULT NULL,
       IN_DIAGNOSISXML VARCHAR2)
AS
  X SYS.XMLTYPE;
BEGIN
X := SYS.XMLTYPE.CREATEXML(IN_DIAGNOSISXML);
  FOR DIAG IN (
      SELECT EXTRACTVALUE(VALUE(OSD),'/ORDERSETDIAGNOSIS/DIAGNOSIS_ID/TEXT()') AS DIAGNOSIS_ID,
        EXTRACTVALUE(VALUE(OSD),'/ORDERSETDIAGNOSIS/LEXICAL_CODE/TEXT()') AS LEXICAL_CODE,
        EXTRACTVALUE(VALUE(OSD),'/ORDERSETDIAGNOSIS/IMO_DESCRIPTION/TEXT()') AS IMO_DESCRIPTION,
        EXTRACTVALUE(VALUE(OSD),'/ORDERSETDIAGNOSIS/ICD9_CODE/TEXT()') AS ICD9_CODE,
        EXTRACTVALUE(VALUE(OSD),'/ORDERSETDIAGNOSIS/ICD10_CODE/TEXT()') AS ICD10_CODE,
        EXTRACTVALUE(VALUE(OSD),'/ORDERSETDIAGNOSIS/SNOMED_CODE/TEXT()') AS SNOMED_CODE
  FROM  TABLE(XMLSEQUENCE(EXTRACT(X,'/DOCUMENTELEMENT/ORDERSETDIAGNOSIS'))) OSD
  )
LOOP
 
              INSERT INTO ORDER_SET_DIAGNOSIS(
                                  ORDER_SET_DIAG_ID,
                 ORDER_SET_ID,
                 DIAGNOSIS_ID,
                 TIMESTAMP,
                 MODIFIED_BY,
                 LEXICAL_CODE,
                 IMO_DESCRIPTION,
                 ICD9_CODE,
                 ICD10_CODE,
                 SNOMED_CODE)
                 VALUES(
                                  OSDIAG_SEQ.NEXTVAL,
                 IN_ORDER_SET_ID,
                 DIAG.DIAGNOSIS_ID,
                 SYSDATE,
                 IN_MODIFIED_BY,
                 DIAG.LEXICAL_CODE,
                 DIAG.IMO_DESCRIPTION,
                 DIAG.ICD9_CODE,
                 DIAG.ICD10_CODE,
                 DIAG.SNOMED_CODE);
END LOOP;


EXCEPTION
WHEN OTHERS THEN
    dbms_output.put_line(SQLERRM);
    RAISE_APPLICATION_ERROR(-20001,   SQLERRM);
END;   

This post has been answered by odie_63 on Mar 24 2014
Jump to Answer
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Apr 21 2014
Added on Mar 23 2014
1 comment
1,164 views