33: BEGIN
34: -- create a temporary lob
35: l_xml_clob := system.okc_aq_msg_typ(empty_clob());
36: x_xml_clob := system.okc_aq_msg_typ(empty_clob());
37: dbms_lob.createtemporary(l_xml_clob.body,TRUE,dbms_lob.session);
38: dbms_lob.writeappend(l_xml_clob.body,length(l_constant),l_constant);
39:
40: -- load message body with message
41: l_constant := '
34: -- create a temporary lob
35: l_xml_clob := system.okc_aq_msg_typ(empty_clob());
36: x_xml_clob := system.okc_aq_msg_typ(empty_clob());
37: dbms_lob.createtemporary(l_xml_clob.body,TRUE,dbms_lob.session);
38: dbms_lob.writeappend(l_xml_clob.body,length(l_constant),l_constant);
39:
40: -- load message body with message
41: l_constant := '
42: p_corrid_rec.corrid ||
42: p_corrid_rec.corrid ||
43: ' [
44: p_corrid_rec.corrid ||
45: '(';
46: dbms_lob.writeappend ( l_xml_clob.body
47: , length(l_constant)
48: , l_constant);
49:
50: -- loop thro the records and build xml clob
50: -- loop thro the records and build xml clob
51: FOR counter IN 1..p_element_tbl.count LOOP
52: l_element_name := p_element_tbl(l_index).element_name;
53: l_constant := l_element_name||',';
54: dbms_lob.writeappend(l_xml_clob.body,length(l_constant),l_constant);
55: l_index := l_index + 1;
56: END LOOP;
57: l_index := 1;
58:
56: END LOOP;
57: l_index := 1;
58:
59: -- trim the trailing ',' from the clob
60: dbms_lob.trim ( l_xml_clob.body
61: , dbms_lob.getlength(l_xml_clob.body) - 1);
62: l_constant := ')>';
63: dbms_lob.writeappend(l_xml_clob.body,length(l_constant),l_constant);
64:
57: l_index := 1;
58:
59: -- trim the trailing ',' from the clob
60: dbms_lob.trim ( l_xml_clob.body
61: , dbms_lob.getlength(l_xml_clob.body) - 1);
62: l_constant := ')>';
63: dbms_lob.writeappend(l_xml_clob.body,length(l_constant),l_constant);
64:
65: -- loop thro the records to add DTD
59: -- trim the trailing ',' from the clob
60: dbms_lob.trim ( l_xml_clob.body
61: , dbms_lob.getlength(l_xml_clob.body) - 1);
62: l_constant := ')>';
63: dbms_lob.writeappend(l_xml_clob.body,length(l_constant),l_constant);
64:
65: -- loop thro the records to add DTD
66: FOR counter IN 1..p_element_tbl.count LOOP
67: l_element_name := p_element_tbl(l_index).element_name;
66: FOR counter IN 1..p_element_tbl.count LOOP
67: l_element_name := p_element_tbl(l_index).element_name;
68: l_index := l_index + 1;
69: l_constant := '';
70: dbms_lob.writeappend(l_xml_clob.body,length(l_constant),l_constant);
71: END LOOP;
72: l_index := 1;
73: l_constant := ']><'||p_corrid_rec.corrid||'>';
74: dbms_lob.writeappend(l_xml_clob.body,length(l_constant),l_constant);
70: dbms_lob.writeappend(l_xml_clob.body,length(l_constant),l_constant);
71: END LOOP;
72: l_index := 1;
73: l_constant := ']><'||p_corrid_rec.corrid||'>';
74: dbms_lob.writeappend(l_xml_clob.body,length(l_constant),l_constant);
75:
76: -- loop thro the records to add the xml string
77: FOR counter IN 1..p_element_tbl.count LOOP
78: l_element_name := p_element_tbl(l_index).element_name;
79: l_element_value := p_element_tbl(l_index).element_value;
80: l_index := l_index + 1;
81: l_constant := '<'||l_element_name||'>'||
82: l_element_value||'';
83: dbms_lob.writeappend(l_xml_clob.body,length(l_constant),l_constant);
84: END LOOP;
85: l_index := 1;
86: l_constant := '';
87: dbms_lob.writeappend ( l_xml_clob.body
83: dbms_lob.writeappend(l_xml_clob.body,length(l_constant),l_constant);
84: END LOOP;
85: l_index := 1;
86: l_constant := '';
87: dbms_lob.writeappend ( l_xml_clob.body
88: , length(l_constant)
89: , l_constant);
90:
91: -- l_xml_clob.body := dbms_lob.substr(l_xml_clob.body,32767,1);
87: dbms_lob.writeappend ( l_xml_clob.body
88: , length(l_constant)
89: , l_constant);
90:
91: -- l_xml_clob.body := dbms_lob.substr(l_xml_clob.body,32767,1);
92:
93: x_xml_clob.body := l_xml_clob.body;
94: dbms_lob.freetemporary(l_xml_clob.body);
95:
90:
91: -- l_xml_clob.body := dbms_lob.substr(l_xml_clob.body,32767,1);
92:
93: x_xml_clob.body := l_xml_clob.body;
94: dbms_lob.freetemporary(l_xml_clob.body);
95:
96: END;
97:
98:
122:
123: BEGIN
124:
125: l_msg := system.okc_aq_msg_typ(empty_clob());
126: dbms_lob.createtemporary(l_msg.body,TRUE,dbms_lob.session);
127: l_temp_clob := system.okc_aq_msg_typ(empty_clob());
128: dbms_lob.createtemporary(l_temp_clob.body,TRUE,dbms_lob.session);
129: l_temp1_clob := system.okc_aq_msg_typ(empty_clob());
130: dbms_lob.createtemporary(l_temp1_clob.body,TRUE,dbms_lob.session);
124:
125: l_msg := system.okc_aq_msg_typ(empty_clob());
126: dbms_lob.createtemporary(l_msg.body,TRUE,dbms_lob.session);
127: l_temp_clob := system.okc_aq_msg_typ(empty_clob());
128: dbms_lob.createtemporary(l_temp_clob.body,TRUE,dbms_lob.session);
129: l_temp1_clob := system.okc_aq_msg_typ(empty_clob());
130: dbms_lob.createtemporary(l_temp1_clob.body,TRUE,dbms_lob.session);
131: l_msg := p_msg;
132:
126: dbms_lob.createtemporary(l_msg.body,TRUE,dbms_lob.session);
127: l_temp_clob := system.okc_aq_msg_typ(empty_clob());
128: dbms_lob.createtemporary(l_temp_clob.body,TRUE,dbms_lob.session);
129: l_temp1_clob := system.okc_aq_msg_typ(empty_clob());
130: dbms_lob.createtemporary(l_temp1_clob.body,TRUE,dbms_lob.session);
131: l_msg := p_msg;
132:
133: -- fix the position to remove DTD of xml string
134: l_end_pos := dbms_lob.instr(l_msg.body,l_tag,1,1) + 3 ;
130: dbms_lob.createtemporary(l_temp1_clob.body,TRUE,dbms_lob.session);
131: l_msg := p_msg;
132:
133: -- fix the position to remove DTD of xml string
134: l_end_pos := dbms_lob.instr(l_msg.body,l_tag,1,1) + 3 ;
135: -- cut the DTD from xml string
136: l_amount := dbms_lob.getlength(l_msg.body)- l_end_pos;
137: dbms_lob.copy(l_temp_clob.body,l_msg.body,l_amount,1,
138: (l_end_pos+1));
132:
133: -- fix the position to remove DTD of xml string
134: l_end_pos := dbms_lob.instr(l_msg.body,l_tag,1,1) + 3 ;
135: -- cut the DTD from xml string
136: l_amount := dbms_lob.getlength(l_msg.body)- l_end_pos;
137: dbms_lob.copy(l_temp_clob.body,l_msg.body,l_amount,1,
138: (l_end_pos+1));
139:
140: l_length := dbms_lob.getlength(l_temp_clob.body);
133: -- fix the position to remove DTD of xml string
134: l_end_pos := dbms_lob.instr(l_msg.body,l_tag,1,1) + 3 ;
135: -- cut the DTD from xml string
136: l_amount := dbms_lob.getlength(l_msg.body)- l_end_pos;
137: dbms_lob.copy(l_temp_clob.body,l_msg.body,l_amount,1,
138: (l_end_pos+1));
139:
140: l_length := dbms_lob.getlength(l_temp_clob.body);
141:
136: l_amount := dbms_lob.getlength(l_msg.body)- l_end_pos;
137: dbms_lob.copy(l_temp_clob.body,l_msg.body,l_amount,1,
138: (l_end_pos+1));
139:
140: l_length := dbms_lob.getlength(l_temp_clob.body);
141:
142: -- fix position to get corrid
143: l_tag := '>';
144: l_amount := (dbms_lob.instr(l_temp_clob.body,l_tag,1,1)-1);
140: l_length := dbms_lob.getlength(l_temp_clob.body);
141:
142: -- fix position to get corrid
143: l_tag := '>';
144: l_amount := (dbms_lob.instr(l_temp_clob.body,l_tag,1,1)-1);
145:
146: l_char_corrid := dbms_lob.substr(l_temp_clob.body,l_amount,1);
147:
148: -- assign corrid to corrid_rec_typ
142: -- fix position to get corrid
143: l_tag := '>';
144: l_amount := (dbms_lob.instr(l_temp_clob.body,l_tag,1,1)-1);
145:
146: l_char_corrid := dbms_lob.substr(l_temp_clob.body,l_amount,1);
147:
148: -- assign corrid to corrid_rec_typ
149: x_corrid.corrid := l_char_corrid;
150: l_length := length(l_char_corrid)+1;
147:
148: -- assign corrid to corrid_rec_typ
149: x_corrid.corrid := l_char_corrid;
150: l_length := length(l_char_corrid)+1;
151: l_amount := (dbms_lob.getlength(l_temp_clob.body) -
152: l_length);
153: dbms_lob.copy(l_temp1_clob.body,l_temp_clob.body,
154: l_amount,1,(l_length+1));
155: -- fix position to remove end corrid tag REMINDER!
149: x_corrid.corrid := l_char_corrid;
150: l_length := length(l_char_corrid)+1;
151: l_amount := (dbms_lob.getlength(l_temp_clob.body) -
152: l_length);
153: dbms_lob.copy(l_temp1_clob.body,l_temp_clob.body,
154: l_amount,1,(l_length+1));
155: -- fix position to remove end corrid tag REMINDER!
156: l_length := dbms_lob.getlength(l_temp1_clob.body)-(length(l_char_corrid)+3);
157: dbms_lob.trim(l_temp1_clob.body,l_length);
152: l_length);
153: dbms_lob.copy(l_temp1_clob.body,l_temp_clob.body,
154: l_amount,1,(l_length+1));
155: -- fix position to remove end corrid tag REMINDER!
156: l_length := dbms_lob.getlength(l_temp1_clob.body)-(length(l_char_corrid)+3);
157: dbms_lob.trim(l_temp1_clob.body,l_length);
158:
159: -- Remove
160: l_length := dbms_lob.getlength(l_temp1_clob.body);
153: dbms_lob.copy(l_temp1_clob.body,l_temp_clob.body,
154: l_amount,1,(l_length+1));
155: -- fix position to remove end corrid tag REMINDER!
156: l_length := dbms_lob.getlength(l_temp1_clob.body)-(length(l_char_corrid)+3);
157: dbms_lob.trim(l_temp1_clob.body,l_length);
158:
159: -- Remove
160: l_length := dbms_lob.getlength(l_temp1_clob.body);
161: l_char_element_name := dbms_lob.substr(l_temp1_clob.body,l_length,1);
156: l_length := dbms_lob.getlength(l_temp1_clob.body)-(length(l_char_corrid)+3);
157: dbms_lob.trim(l_temp1_clob.body,l_length);
158:
159: -- Remove
160: l_length := dbms_lob.getlength(l_temp1_clob.body);
161: l_char_element_name := dbms_lob.substr(l_temp1_clob.body,l_length,1);
162: -- Remove
163:
164: LOOP
157: dbms_lob.trim(l_temp1_clob.body,l_length);
158:
159: -- Remove
160: l_length := dbms_lob.getlength(l_temp1_clob.body);
161: l_char_element_name := dbms_lob.substr(l_temp1_clob.body,l_length,1);
162: -- Remove
163:
164: LOOP
165:
164: LOOP
165:
166: -- capture element name
167: l_start_bracket_pos
168: := dbms_lob.INSTR(l_temp1_clob.body,start_bracket,search_start,1);
169:
170: -- see if it is time to get out
171: IF NVL(l_start_bracket_pos,0) = 0
172: THEN
173: EXIT;
174: ELSE
175: l_start_pos := l_start_bracket_pos + 1;
176: END IF;
177: l_end_pos := (dbms_lob.INSTR(l_temp1_clob.body,
178: end_bracket,
179: l_start_pos,
180: 1) - 1);
181: l_length := (l_end_pos-l_start_pos) + 1;
178: end_bracket,
179: l_start_pos,
180: 1) - 1);
181: l_length := (l_end_pos-l_start_pos) + 1;
182: l_char_element_name := dbms_lob.SUBSTR(l_temp1_clob.body,
183: l_length,
184: l_start_pos);
185:
186:
189: l_msg_tab(l_index).element_name := l_char_element_name;
190:
191: -- capture element value
192: l_start_pos := l_end_pos + 2;
193: l_end_pos := (dbms_lob.INSTR(l_temp1_clob.body,
194: end_tag,
195: l_start_pos,1) -1);
196: l_length := (l_end_pos-l_start_pos)+1;
197: l_char_element_value := dbms_lob.SUBSTR(l_temp1_clob.body,
193: l_end_pos := (dbms_lob.INSTR(l_temp1_clob.body,
194: end_tag,
195: l_start_pos,1) -1);
196: l_length := (l_end_pos-l_start_pos)+1;
197: l_char_element_value := dbms_lob.SUBSTR(l_temp1_clob.body,
198: l_length,l_start_pos);
199:
200:
201: -- assign element_value to msg_tab_typ rows
204: l_index := l_index + 1 ;
205: END LOOP;
206: x_msg_tab := l_msg_tab;
207:
208: dbms_lob.freetemporary(l_temp_clob.body);
209: dbms_lob.freetemporary(l_temp1_clob.body);
210: -- dbms_lob.freetemporary(l_msg.body);
211: END;
212:
205: END LOOP;
206: x_msg_tab := l_msg_tab;
207:
208: dbms_lob.freetemporary(l_temp_clob.body);
209: dbms_lob.freetemporary(l_temp1_clob.body);
210: -- dbms_lob.freetemporary(l_msg.body);
211: END;
212:
213: END;
206: x_msg_tab := l_msg_tab;
207:
208: dbms_lob.freetemporary(l_temp_clob.body);
209: dbms_lob.freetemporary(l_temp1_clob.body);
210: -- dbms_lob.freetemporary(l_msg.body);
211: END;
212:
213: END;