[x]
Posted via EE Mobile

Search, ask, and monitor your questions on the go with EE Mobile. Visit Experts Exchange from your mobile device and never be out of touch again.

Question
[x]
Attachment Details

How do I create a large xml file using Oracle 9i

Asked by Donzee in Oracle 9.x, Oracle CRM, Oracle SCM

Tags: Oracle 9i

Id sure appreciate any help anyone can give me with this problem. I have to create a rather large xml file from an Oracle database, using version 9i. I have the following code which creates a nice xml file if clients have under approximately 30 service events, but when they have more I get the following error message,

ORA-29285: file write error
ORA-06512: at "SYS.UTL_FILE", line 18
ORA-06512: at "SYS.UTL_FILE", line 993
ORA-06512: at "XDB.DBMS_XSLPROCESSOR", line 73
ORA-06512: at "DZ.MH_TEST_TAG", line 851
ORA-06512: at line 1

I think it is because the tag is too big. It access the directory and creates the file just fine as I mentioned earlier when there are only around 30 service events. Im pretty sure I need to write the results in chunks, but am unsure how to do this. Can anyone help me?

Thanks in advance.
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
CREATE OR REPLACE PROCEDURE                mh_test
AS 
    
 vInHandle          utl_file.file_type;
 vNewLine           CLOB;
 
 
CURSOR crGetAdmissionTagStakeholder IS
SELECT XMLELEMENT("Stakeholder", XMLELEMENT("ULI", a.ULI),
	   							 XMLELEMENT("Gender",a.GENDER),
	   					         XMLELEMENT("BirthDate", XMLATTRIBUTES(a.BIRTH_DATE_TYPE AS "type"), a.BIRTH_DATE),
								 XMLELEMENT("HealthCareNumberInformation",XMLELEMENT("HealthCareNumber",a.HCN),
								 										  XMLFOREST(NVL(a.PROV_ISSUING_HCN,'AB') AS "ProvinceTerritoryIssuingHCN")),
								 XMLELEMENT("SubmissionType",a.SUBMISSION_TYPE),
 
								 (SELECT XMLAGG(XMLELEMENT("ServiceEpisode", XMLELEMENT("AdmissionDate", a2.ADMISSION_DATE),
															  XMLELEMENT("EpisodeStart",XMLFOREST(a2.SITE_CASE_NR AS "ChartNumber"
															 							           , a2.PSYCHIATRIC_STATUS AS "PsychiatricStatus"
																						           , a2.PUBLIC_GUARDIAN_CODE AS "PublicGuardianCode"),
																						  XMLFOREST(XMLFOREST(a2.PATIENT_REFERRED_BY AS "PatientReferredBy") AS "ReferralInformation"),
																						  XMLFOREST(a2.FORENSIC_LEGAL_STATUS AS "ForensicLegalStatus",
																						            a2.RESPONSIBILITY_FOR_PAYMENT AS "ResponsibilityForPayment"),
																						  XMLFOREST(XMLFOREST(a2.PROGRAM_TYPE1 AS "MentalHealthProgramType",
																					 						   a2.PROGRAM_START_DATE1 AS "ServiceProgramStartDate") AS "ProgramInformation"),
																						  XMLFOREST(XMLFOREST(a2.MOST_RESPONSIBLE_PROVIDER_ID "MostResponsibleProviderID",
																					 					      a2.PROVIDER_EXPERTISE AS "MostResponsibleProviderExp") AS "PhysicianInformation"),
										                                                  (SELECT XMLAGG(XMLFOREST(XMLFOREST(d3.DIAGNOSIS_TYPE AS "DiagnosisType",
																														  	 d3.ICD10_CODE AS "ICD10CACode",
                               
																														     d3.GAF_ADMIT AS "DSMIVTRGAFScore") AS "Diagnosis"))
																						     FROM Diagnosis d3
															  							    WHERE a2.uli = d3.uli
																							  AND a2.encounter_number = d3.encounter_number),
																						  XMLFOREST(XMLFOREST(a2.ADMIT_VIA_AMBULANCE AS"AdmissionViaAmbulance"
																					                        , a2.ACCOMPANIED_BY_AT_ADMIT AS "AccompaniedByAtAdmission") AS "AdmissionInformation"),
																														  CASE
																														  WHEN a2.HOMELESS_FLAG IS NOT NULL THEN
																					 									  XMLELEMENT("AddressInformation",XMLELEMENT("HomelessFlag",a2.HOMELESS_FLAG),
																					 								    								    XMLELEMENT("OtherCountryFlag",a2.OTHER_COUNTRY_KNOWN_FLAG),
																													    								    XMLELEMENT("ResidenceInformation",XMLFOREST(CASE 
																																							    										WHEN a2.OTHER_COUNTRY_KNOWN_FLAG = 'N'
																																																		THEN a2.PROVINCE_OF_RESIDENCE
																																																		END AS "ProvinceOfPatientsResidence"
																													   									   	                                           , a2.POSTALCODE_KNOWN_FLAG AS "PCOfPatientsCurrentResKnownFlg"
																																					   		                                           , CASE
																																																	     WHEN (a2.OTHER_COUNTRY_KNOWN_FLAG = 'N' OR a2.HOMELESS_FLAG = 'N')
																																																		 THEN a2.POSTALCODE
																																																		 END AS "PCOfPatientsCurrentRes")))
																														  END
															
								 		 					  ),															  
                                                            CASE 
															WHEN (SELECT MAX(e2.SERVICE_DATE) FROM SERVICE_EVENT e2, ADMISSIONS a2 WHERE a2.ULI = e2.ULI) IS NOT NULL THEN
															(SELECT XMLAGG(XMLELEMENT("StakeholderServiceEvent",XMLELEMENT("ServiceEventIdentifier",e3.SERVICE_EVENT_IDENTIFIER),
																					 			                XMLELEMENT("ServiceEventStartDate",e3.SERVICE_DATE),
																								                XMLELEMENT("ServiceEventDuration",e3.SERVICE_EVENT_DURATION),
																								                XMLELEMENT("GroupServiceEventInformation",XMLELEMENT("GroupServiceEventFlag",e3.GROUP_FLAG),
																								 										                  CASE
																								 										                   WHEN e3.GROUP_FLAG = 'Y' THEN
																														  				                   XMLFOREST(e3.NO_PARTICIPANTS_GROUP AS "NumberOfParticipantsInGroup")
																																		                   END),
																								                XMLELEMENT("InterventionInformation",     XMLELEMENT("InterventionCode",e3.CCI_CD)
																														  				                  ,XMLFOREST( e3.CCI_STATUS AS "InterventionAttributeStatus"
																																		                             ,e3.CCI_LOCATION AS "InterventionAttibuteDelivMde"
																																           			                 ,e3.CCI_EXTENT AS "InterventionAttributeExtent")),
																								                (SELECT XMLAGG(XMLFOREST(XMLFOREST(e4.PROVIDER_TYPE_CD AS "ServiceProviderRoleType",
																														  				           e4.PROVIDER_CD AS "ServiceProviderID")"ServiceEventProvider"))
																												FROM ServiceProvider e4
																												WHERE e3.uli = e4.uli
																												  AND e3.SERVICE_EVENT_IDENTIFIER = e4.SERVICE_EVENT_IDENTIFIER)))
 
														       FROM Service_Event e3
															  WHERE a2.uli = e3.uli
															    AND a2.encounter_number = e3.encounter_number
																AND e3.service_event_identifier like '414%')
															END,
															
										           XMLFOREST(XMLFOREST(d2.DISCHARGE_WAITLIST_START AS "DatePlacedOnDischWaitlist",
								   			                           d2.DISCHARGE_WAITLIST_REASON AS "ReasonPlacedOnDischWaitlist") AS "OnDischargeWaitlist"),
							                       XMLFOREST(XMLFOREST(d2.DISCHARGE_WAITLIST_END AS "DateTakenOffDischWaitlist") AS "OffDischargeWaitlist")))--,
										   FROM admissions a2
												, discharge d2
								           WHERE a.uli = a2.uli
										     AND a.uli = d2.uli
											 AND a2.encounter_number = d2.encounter_number),
							CASE 
							WHEN d3.DISCHARGE_DATE IS NOT NULL THEN
							XMLELEMENT("EpisodeClose", XMLFOREST(d3.DISCHARGE_DATE AS "DischargeDate"),
									                   XMLFOREST(XMLFOREST(d3.DISCHARGE_DISPOSITION AS "DischargeDisposition") AS "DispositionInformation"))
                            END																																																																	 												
)
				  .getClobVal() AS "result"
FROM Admissions a
	 , Discharge d3
WHERE a.ULI = d3.ULI	
  AND a.ENCOUNTER_NUMBER = d3.ENCOUNTER_NUMBER 
  AND a.uli = 3131
GROUP BY a.ULI
	  , a.GENDER
	  , a.BIRTH_DATE_TYPE
	  , a.BIRTH_DATE
	  , a.HCN 
	  , a.PROV_ISSUING_HCN
	  , a.SUBMISSION_TYPE
	  , d3.DISCHARGE_DATE
	  , d3.DISCHARGE_DISPOSITION  
;
   
  vInHandle := utl_file.fopen('/filedest/', dz.txt, 'w', 32767);
    
  OPEN crGetAdmissionTagStakeholder;
  LOOP
  
  FETCH crGetAdmissionTagStakeholder INTO vNewLine;
  EXIT WHEN crGetAdmissionTagStakeholder%NOTFOUND;
 
  BEGIN print_clob (vInHandle,vNewLine); END;
 
 
  END LOOP;
  CLOSE crGetAdmissionTagStakeholder; 
 
  utl_file.fclose(vInHandle);          
--    EXCEPTION
--      WHEN OTHERS THEN 'Failed';
--    EXIT;
END mh_test;
/
 
 
This is the procedure that prints the file:
 
CREATE OR REPLACE PROCEDURE print_clob (p_file  IN utl_file.file_type, p_clob IN CLOB) AS
 
 l_buffer  VARCHAR2(32767);
 l_offset  NUMBER := 1;
 
 
BEGIN
 
  LOOP
  
      l_buffer := DBMS_LOB.substr(p_clob, 32767, l_offset);
      EXIT WHEN l_buffer IS NULL;
	  
 
	  UTL_FILE.put(p_file, l_buffer);
--	  UTL_FILE.fflush(p_file);
 
	  l_offset := l_offset + 32767;
	  
 END LOOP;
 
EXCEPTION
  WHEN OTHERS THEN
    -- Do something useful here.
    RAISE;
    
END print_clob;
/
[+][-]10/27/09 12:14 AM, ID: 25669721Expert Comment

At Experts Exchange, members can ask their questions to thousands of technology professionals, also known as Experts. Experts compete and collaborate to answer those questions by leaving comments like this one.

Start your 30-day free trial to view this Expert Comment or ask the Experts your question.

 
[+][-]10/27/09 09:24 AM, ID: 25674334Author Comment

Often, when Experts are collaborating with members who have asked questions, they will request additional information about the problem. Askers respond with an author comment like this one.

Start your 30-day free trial to view this Author Comment or ask the Experts your question.

 
[+][-]10/27/09 11:06 AM, ID: 25675518Author Comment

Often, when Experts are collaborating with members who have asked questions, they will request additional information about the problem. Askers respond with an author comment like this one.

Start your 30-day free trial to view this Author Comment or ask the Experts your question.

 
[+][-]10/27/09 12:21 PM, ID: 25676326Author Comment

Often, when Experts are collaborating with members who have asked questions, they will request additional information about the problem. Askers respond with an author comment like this one.

Start your 30-day free trial to view this Author Comment or ask the Experts your question.

 
 
Loading Advertisement...
20091111-EE-VQP-89 - Hierarchy / EE_QW_3_20080625