DBA Data[Home] [Help]

PACKAGE BODY: APPS.FND_ATTACHED_DOCUMENTS2_PKG

Source


1 PACKAGE BODY fnd_attached_documents2_pkg as
2 /* $Header: AFAKATDB.pls 120.7 2006/11/13 19:32:50 blash ship $ */
3 
4 
5 
6 --  API to delete attachments for a given entity
7 PROCEDURE delete_attachments(X_entity_name IN VARCHAR2,
8 		X_pk1_value IN VARCHAR2,
9 		X_pk2_value IN VARCHAR2 DEFAULT NULL,
10 		X_pk3_value IN VARCHAR2 DEFAULT NULL,
11 		X_pk4_value IN VARCHAR2 DEFAULT NULL,
12 		X_pk5_value IN VARCHAR2 DEFAULT NULL,
13 		X_delete_document_flag IN VARCHAR2,
14 		X_automatically_added_flag IN VARCHAR2 DEFAULT NULL) IS
15 l_delete_document_flag varchar2(1);
16 
17 BEGIN
18   l_delete_document_flag := X_delete_document_flag;
19   IF l_delete_document_flag IS NULL THEN
20     l_delete_document_flag := 'N';
21   END IF;
22   --  Check that entity_name and pk1_value have values
23   IF (X_entity_name IS NULL
24 	OR X_pk1_value IS NULL) THEN
25 		RETURN;
26   END IF;
27 
28   --  If X_delete_doc_flag is Y, then need to delete
29   --  document records too
30   IF X_pk2_value IS NULL THEN -- performance change IF.
31 
32   IF (l_delete_document_flag = 'Y') THEN
33 	--  need to delete from each sub-table holding the data
34 	--  doing this in a loop to reduce amount of code
35  	DELETE FROM fnd_documents_short_text
36          WHERE media_id IN
37 	(SELECT fd.media_id
38  	  FROM fnd_documents_tl fdtl,
39 	       fnd_documents fd,
40                fnd_attached_documents fad
41 	  WHERE fdtl.document_id = fd.document_id
42 	AND fd.document_id = fad.document_id
43 	AND fd.usage_type = 'O'
44 	AND fd.datatype_id = 1
45 	AND fad.entity_name = X_entity_name
46 	AND fad.pk1_value = X_pk1_value);
47 
48 
49  	DELETE FROM fnd_documents_long_text
50          WHERE media_id IN
51 	(SELECT fd.media_id
52  	  FROM fnd_documents_tl fdtl,
53 	       fnd_documents fd,
54                fnd_attached_documents fad
55 	  WHERE fdtl.document_id = fd.document_id
56 	AND fd.document_id = fad.document_id
57 	AND fd.usage_type = 'O'
58 	AND fd.datatype_id = 2
59 	AND fad.entity_name = X_entity_name
60 	AND fad.pk1_value = X_pk1_value);
61 
62  	DELETE FROM fnd_documents_long_raw
63          WHERE media_id IN
64 	(SELECT fd.media_id
65  	  FROM fnd_documents_tl fdtl,
66 	       fnd_documents fd,
67                fnd_attached_documents fad
68 	  WHERE fdtl.document_id = fd.document_id
69 	AND fd.document_id = fad.document_id
70 	AND fd.usage_type = 'O'
71 	AND fd.datatype_id IN (3,4)
72 	AND fad.entity_name = X_entity_name
73 	AND fad.pk1_value = X_pk1_value);
74 
75          DELETE FROM fnd_lobs
76          WHERE file_id IN
77 	(SELECT fd.media_id
78  	  FROM fnd_documents_tl fdtl,
79 	       fnd_documents fd,
80                fnd_attached_documents fad
81 	  WHERE fdtl.document_id = fd.document_id
82 	AND fd.document_id = fad.document_id
83 	AND fd.usage_type = 'O'
84 	AND fd.datatype_id = 6
85 	AND fad.entity_name = X_entity_name
86 	AND fad.pk1_value = X_pk1_value);
87 
88 	--  Delete from FND_DOCUMENTS_TL table
89 	DELETE FROM fnd_documents_tl
90 	 WHERE document_id IN
91 	(SELECT fad.document_id
92 	FROM fnd_attached_documents fad, fnd_documents fd
93 	WHERE fad.document_id = fd.document_id
94 	AND fd.usage_type = 'O'
95 	AND fad.entity_name = X_entity_name
96 	AND fad.pk1_value = X_pk1_value);
97 
98 	--  Delete from FND_DOCUMENTS table
99 	DELETE FROM fnd_documents
100 	WHERE usage_type = 'O'
101 	 AND document_id IN
102 		(SELECT document_id
103 	           FROM fnd_attached_documents fad
104 		WHERE fad.entity_name = X_entity_name
105 		AND fad.pk1_value = X_pk1_value);
106   END IF;  --  end of if l_delete_document_flag is Y
107 
108   --  delete from FND_ATTACHED_DOCUMENTS table
109 	DELETE FROM fnd_attached_documents fad
110 	  WHERE fad.entity_name = X_entity_name
111 	    AND fad.automatically_added_flag like decode(X_automatically_added_flag,NULL,'%',X_automatically_added_flag)
112 	    AND fad.pk1_value = X_pk1_value;
113 
114   ELSIF X_pk3_value IS NULL THEN  --  performance change IF
115       IF (l_delete_document_flag = 'Y') THEN
116 	--  need to delete from each sub-table holding the data
117 	--  doing this in a loop to reduce amount of code
118  	DELETE FROM fnd_documents_short_text
119          WHERE media_id IN
120 	(SELECT fd.media_id
121  	  FROM fnd_documents_tl fdtl,
122 	       fnd_documents fd,
123                fnd_attached_documents fad
124 	  WHERE fdtl.document_id = fd.document_id
125 	AND fd.document_id = fad.document_id
126 	AND fd.usage_type = 'O'
127 	AND fd.datatype_id = 1
128 	AND fad.entity_name = X_entity_name
129         AND fad.pk1_value = X_pk1_value
130 	AND fad.pk2_value = X_pk2_value);
131 
132 
133  	DELETE FROM fnd_documents_long_text
134          WHERE media_id IN
135 	(SELECT fd.media_id
136  	  FROM fnd_documents_tl fdtl,
137 	       fnd_documents fd,
138                fnd_attached_documents fad
139 	  WHERE fdtl.document_id = fd.document_id
140 	AND fd.document_id = fad.document_id
141 	AND fd.usage_type = 'O'
142 	AND fd.datatype_id = 2
143 	AND fad.entity_name = X_entity_name
144 	AND fad.pk1_value = X_pk1_value
145 	AND fad.pk2_value = X_pk2_value);
146 
147  	DELETE FROM fnd_documents_long_raw
148          WHERE media_id IN
149 	(SELECT fd.media_id
150  	  FROM fnd_documents_tl fdtl,
151 	       fnd_documents fd,
152                fnd_attached_documents fad
153 	  WHERE fdtl.document_id = fd.document_id
154 	AND fd.document_id = fad.document_id
155 	AND fd.usage_type = 'O'
156 	AND fd.datatype_id IN (3,4)
157 	AND fad.entity_name = X_entity_name
158 	AND fad.pk1_value = X_pk1_value
159 	AND fad.pk2_value = X_pk2_value);
160 
161          DELETE FROM fnd_lobs
162          WHERE file_id IN
163 	(SELECT fd.media_id
164  	  FROM fnd_documents_tl fdtl,
165 	       fnd_documents fd,
166                fnd_attached_documents fad
167 	  WHERE fdtl.document_id = fd.document_id
168 	AND fd.document_id = fad.document_id
169 	AND fd.usage_type = 'O'
170 	AND fd.datatype_id = 6
171 	AND fad.entity_name = X_entity_name
172 	AND fad.pk1_value = X_pk1_value
173 	AND fad.pk2_value = X_pk2_value);
174 
175 	--  Delete from FND_DOCUMENTS_TL table
176 	DELETE FROM fnd_documents_tl
177 	 WHERE document_id IN
178 	(SELECT fad.document_id
179 	FROM fnd_attached_documents fad, fnd_documents fd
180 	WHERE fad.document_id = fd.document_id
181 	AND fd.usage_type = 'O'
182 	AND fad.entity_name = X_entity_name
183 	AND fad.pk1_value = X_pk1_value
184 	AND fad.pk2_value = X_pk2_value);
185 
186 	--  Delete from FND_DOCUMENTS table
187 	DELETE FROM fnd_documents
188 	WHERE usage_type = 'O'
189 	 AND document_id IN
190 		(SELECT document_id
191 	           FROM fnd_attached_documents fad
192 		WHERE fad.entity_name = X_entity_name
193 		AND fad.pk1_value = X_pk1_value
194 	AND fad.pk2_value = X_pk2_value);
195   END IF;  --  end of if l_delete_document_flag is Y
196 
197   --  delete from FND_ATTACHED_DOCUMENTS table
198 	DELETE FROM fnd_attached_documents fad
199 	  WHERE fad.entity_name = X_entity_name
200 	    AND fad.automatically_added_flag like decode(X_automatically_added_flag,NULL,'%',X_automatically_added_flag)
201 	    AND fad.pk1_value = X_pk1_value
202 	AND fad.pk2_value = X_pk2_value;
203 
204   ELSIF X_pk4_value IS NULL THEN     -- performance change if
205  IF (l_delete_document_flag = 'Y') THEN
206 	--  need to delete from each sub-table holding the data
207 	--  doing this in a loop to reduce amount of code
208  	DELETE FROM fnd_documents_short_text
209          WHERE media_id IN
210 	(SELECT fd.media_id
211  	  FROM fnd_documents_tl fdtl,
212 	       fnd_documents fd,
213                fnd_attached_documents fad
214 	  WHERE fdtl.document_id = fd.document_id
215 	AND fd.document_id = fad.document_id
216 	AND fd.usage_type = 'O'
217 	AND fd.datatype_id = 1
218 	AND fad.entity_name = X_entity_name
219 	AND fad.pk1_value = X_pk1_value
220         AND fad.pk2_value = X_pk2_value
221         AND fad.pk3_value = X_pk3_value);
222 
223 
224  	DELETE FROM fnd_documents_long_text
225          WHERE media_id IN
226 	(SELECT fd.media_id
227  	  FROM fnd_documents_tl fdtl,
228 	       fnd_documents fd,
229                fnd_attached_documents fad
230 	  WHERE fdtl.document_id = fd.document_id
231 	AND fd.document_id = fad.document_id
232 	AND fd.usage_type = 'O'
233 	AND fd.datatype_id = 2
234 	AND fad.entity_name = X_entity_name
235 	AND fad.pk1_value = X_pk1_value
236         AND fad.pk2_value = X_pk2_value
237         AND fad.pk3_value = X_pk3_value);
238 
239  	DELETE FROM fnd_documents_long_raw
240          WHERE media_id IN
241 	(SELECT fd.media_id
242  	  FROM fnd_documents_tl fdtl,
243 	       fnd_documents fd,
244                fnd_attached_documents fad
245 	  WHERE fdtl.document_id = fd.document_id
246 	AND fd.document_id = fad.document_id
247 	AND fd.usage_type = 'O'
248 	AND fd.datatype_id IN (3,4)
249 	AND fad.entity_name = X_entity_name
250 	AND fad.pk1_value = X_pk1_value
251         AND fad.pk2_value = X_pk2_value
252         AND fad.pk3_value = X_pk3_value);
253 
254          DELETE FROM fnd_lobs
255          WHERE file_id IN
256 	(SELECT fd.media_id
257  	  FROM fnd_documents_tl fdtl,
258 	       fnd_documents fd,
259                fnd_attached_documents fad
260 	  WHERE fdtl.document_id = fd.document_id
261 	AND fd.document_id = fad.document_id
262 	AND fd.usage_type = 'O'
263 	AND fd.datatype_id = 6
264 	AND fad.entity_name = X_entity_name
265 	AND fad.pk1_value = X_pk1_value
266         AND fad.pk2_value = X_pk2_value
267         AND fad.pk3_value = X_pk3_value);
268 
269 	--  Delete from FND_DOCUMENTS_TL table
270 	DELETE FROM fnd_documents_tl
271 	 WHERE document_id IN
272 	(SELECT fad.document_id
273 	FROM fnd_attached_documents fad, fnd_documents fd
274 	WHERE fad.document_id = fd.document_id
275 	AND fd.usage_type = 'O'
276 	AND fad.entity_name = X_entity_name
277 	AND fad.pk1_value = X_pk1_value
278         AND fad.pk2_value = X_pk2_value
279         AND fad.pk3_value = X_pk3_value);
280 
281 	--  Delete from FND_DOCUMENTS table
282 	DELETE FROM fnd_documents
283 	WHERE usage_type = 'O'
284 	 AND document_id IN
285 		(SELECT document_id
286 	           FROM fnd_attached_documents fad
287 		WHERE fad.entity_name = X_entity_name
288 		AND fad.pk1_value = X_pk1_value
289                 AND fad.pk2_value = X_pk2_value
290                 AND fad.pk3_value = X_pk3_value);
291   END IF;  --  end of if l_delete_document_flag is Y
292 
293   --  delete from FND_ATTACHED_DOCUMENTS table
294 	DELETE FROM fnd_attached_documents fad
295 	  WHERE fad.entity_name = X_entity_name
296 	    AND fad.automatically_added_flag like decode(X_automatically_added_flag,NULL,'%',X_automatically_added_flag)
297 	    AND fad.pk1_value = X_pk1_value
298             AND fad.pk2_value = X_pk2_value
299             AND fad.pk3_value = X_pk3_value;
300 
301  ELSE      -- performance change if
302  IF (l_delete_document_flag = 'Y') THEN
303 	--  need to delete from each sub-table holding the data
304 	--  doing this in a loop to reduce amount of code
305  	DELETE FROM fnd_documents_short_text
306          WHERE media_id IN
307 	(SELECT fd.media_id
308  	  FROM fnd_documents_tl fdtl,
309 	       fnd_documents fd,
310                fnd_attached_documents fad
311 	  WHERE fdtl.document_id = fd.document_id
312 	AND fd.document_id = fad.document_id
313 	AND fd.usage_type = 'O'
314 	AND fd.datatype_id = 1
315 	AND fad.entity_name = X_entity_name
316 	AND fad.pk1_value = X_pk1_value
317         AND fad.pk2_value = X_pk2_value
318         AND fad.pk3_value = X_pk3_value
319         OR  X_pk4_value IS NULL
320         AND fad.pk4_value = X_pk4_value
321         OR  X_pk5_value IS NULL
322         AND fad.pk5_value = X_pk5_value);
323 
324 
325  	DELETE FROM fnd_documents_long_text
326          WHERE media_id IN
327 	(SELECT fd.media_id
328  	  FROM fnd_documents_tl fdtl,
329 	       fnd_documents fd,
330                fnd_attached_documents fad
331 	  WHERE fdtl.document_id = fd.document_id
332 	AND fd.document_id = fad.document_id
333 	AND fd.usage_type = 'O'
334 	AND fd.datatype_id = 2
335 	AND fad.entity_name = X_entity_name
336 	AND fad.pk1_value = X_pk1_value
337         AND fad.pk2_value = X_pk2_value
338         AND fad.pk3_value = X_pk3_value
339         OR  X_pk4_value IS NULL
340         AND fad.pk4_value = X_pk4_value
341         OR  X_pk5_value IS NULL
342         AND fad.pk5_value = X_pk5_value);
343 
344  	DELETE FROM fnd_documents_long_raw
345          WHERE media_id IN
346 	(SELECT fd.media_id
347  	  FROM fnd_documents_tl fdtl,
348 	       fnd_documents fd,
349                fnd_attached_documents fad
350 	  WHERE fdtl.document_id = fd.document_id
351 	AND fd.document_id = fad.document_id
352 	AND fd.usage_type = 'O'
353 	AND fd.datatype_id IN (3,4)
354 	AND fad.entity_name = X_entity_name
355 	AND fad.pk1_value = X_pk1_value
356         AND fad.pk2_value = X_pk2_value
357         AND fad.pk3_value = X_pk3_value
358         OR  X_pk4_value IS NULL
359         AND fad.pk4_value = X_pk4_value
360         OR  X_pk5_value IS NULL
361         AND fad.pk5_value = X_pk5_value);
362 
363          DELETE FROM fnd_lobs
364          WHERE file_id IN
365 	(SELECT fd.media_id
366  	  FROM fnd_documents_tl fdtl,
367 	       fnd_documents fd,
368                fnd_attached_documents fad
369 	  WHERE fdtl.document_id = fd.document_id
370 	AND fd.document_id = fad.document_id
371 	AND fd.usage_type = 'O'
372 	AND fd.datatype_id = 6
373 	AND fad.entity_name = X_entity_name
374 	AND fad.pk1_value = X_pk1_value
375         AND fad.pk2_value = X_pk2_value
376         AND fad.pk3_value = X_pk3_value
377         OR  X_pk4_value IS NULL
378         AND fad.pk4_value = X_pk4_value
379         OR  X_pk5_value IS NULL
380         AND fad.pk5_value = X_pk5_value);
381 
382 	--  Delete from FND_DOCUMENTS_TL table
383         --  BUG#5060588  added Parens around OR's.
384 	DELETE FROM fnd_documents_tl
385 	 WHERE document_id IN
386 	(SELECT fad.document_id
387 	FROM fnd_attached_documents fad, fnd_documents fd
388 	WHERE fad.document_id = fd.document_id
389 	AND fd.usage_type = 'O'
390 	AND fad.entity_name = X_entity_name
391 	AND fad.pk1_value = X_pk1_value
392         AND fad.pk2_value = X_pk2_value
393         AND (fad.pk3_value = X_pk3_value
394         OR  X_pk4_value IS NULL)
395         AND (fad.pk4_value = X_pk4_value
396         OR  X_pk5_value IS NULL)
397         AND fad.pk5_value = X_pk5_value);
398 
399 	--  Delete from FND_DOCUMENTS table
400         --  BUG#5060588  added Parens around OR's.
401 	DELETE FROM fnd_documents
402 	WHERE usage_type = 'O'
403 	 AND document_id IN
404 		(SELECT document_id
405 	           FROM fnd_attached_documents fad
406 		WHERE fad.entity_name = X_entity_name
407 		AND fad.pk1_value = X_pk1_value
408                 AND fad.pk2_value = X_pk2_value
409                 AND (fad.pk3_value = X_pk3_value
410                 OR  X_pk4_value IS NULL)
411                 AND (fad.pk4_value = X_pk4_value
412                 OR  X_pk5_value IS NULL)
413                 AND fad.pk5_value = X_pk5_value);
414   END IF;  --  end of if l_delete_document_flag is Y
415 
416   --  delete from FND_ATTACHED_DOCUMENTS table
417   --  BUG#5060588  added Parens around OR's.
418 	DELETE FROM fnd_attached_documents fad
419 	  WHERE fad.entity_name = X_entity_name
420 	    AND fad.automatically_added_flag like decode(X_automatically_added_flag,NULL,'%',X_automatically_added_flag)
421 	    AND fad.pk1_value = X_pk1_value
422             AND fad.pk2_value = X_pk2_value
426             OR  X_pk5_value IS NULL)
423             AND (fad.pk3_value = X_pk3_value
424             OR  X_pk4_value IS NULL)
425             AND (fad.pk4_value = X_pk4_value
427             AND fad.pk5_value = X_pk5_value;
428 
429   END IF;   -- performance change IF
430 
431 END delete_attachments;
432 
433 
434 --  API to copy attachments from one record to another
435 --  BUG#2790775
436 PROCEDURE copy_attachments(X_from_entity_name IN VARCHAR2,
437 			X_from_pk1_value IN VARCHAR2,
438 			X_from_pk2_value IN VARCHAR2 DEFAULT NULL,
439 			X_from_pk3_value IN VARCHAR2 DEFAULT NULL,
440 			X_from_pk4_value IN VARCHAR2 DEFAULT NULL,
441 			X_from_pk5_value IN VARCHAR2 DEFAULT NULL,
442 			X_to_entity_name IN VARCHAR2,
443 			X_to_pk1_value IN VARCHAR2,
444 			X_to_pk2_value IN VARCHAR2 DEFAULT NULL,
445 			X_to_pk3_value IN VARCHAR2 DEFAULT NULL,
446 			X_to_pk4_value IN VARCHAR2 DEFAULT NULL,
447 			X_to_pk5_value IN VARCHAR2 DEFAULT NULL,
448 			X_created_by IN NUMBER DEFAULT NULL,
449 			X_last_update_login IN NUMBER DEFAULT NULL,
450 			X_program_application_id IN NUMBER DEFAULT NULL,
451 			X_program_id IN NUMBER DEFAULT NULL,
452 			X_request_id IN NUMBER DEFAULT NULL,
453 			X_automatically_added_flag IN VARCHAR2 DEFAULT NULL,
454 			X_from_category_id IN NUMBER DEFAULT NULL,
455 			X_to_category_id IN NUMBER DEFAULT NULL) IS
456   CURSOR docpk1 IS
457 	SELECT fad.seq_num, fad.document_id,
458 		fad.attribute_category, fad.attribute1, fad.attribute2,
459 		fad.attribute3, fad.attribute4, fad.attribute5,
460 		fad.attribute6, fad.attribute7, fad.attribute8,
461 		fad.attribute9, fad.attribute10, fad.attribute11,
462 		fad.attribute12, fad.attribute13, fad.attribute14,
463 		fad.attribute15, fad.column1, fad.automatically_added_flag,
464 		fad.category_id att_cat, fad.pk2_value, fad.pk3_value,
465                 fad.pk4_value, fad.pk5_value,
466 		fd.datatype_id, fd.category_id, fd.security_type, fd.security_id,
467 		fd.publish_flag, fd.image_type, fd.storage_type,
468 		fd.usage_type, fd.start_date_active, fd.end_date_active,
469 		fdtl.language, fdtl.description, fd.file_name,
470 		fd.media_id, fdtl.doc_attribute_category dattr_cat,
471 		fdtl.doc_attribute1 dattr1, fdtl.doc_attribute2 dattr2,
472 		fdtl.doc_attribute3 dattr3, fdtl.doc_attribute4 dattr4,
473 		fdtl.doc_attribute5 dattr5, fdtl.doc_attribute6 dattr6,
474 		fdtl.doc_attribute7 dattr7, fdtl.doc_attribute8 dattr8,
475 		fdtl.doc_attribute9 dattr9, fdtl.doc_attribute10 dattr10,
476 		fdtl.doc_attribute11 dattr11, fdtl.doc_attribute12 dattr12,
477 		fdtl.doc_attribute13 dattr13, fdtl.doc_attribute14 dattr14,
478 		fdtl.doc_attribute15 dattr15, fd.url, fdtl.title
479 	  FROM 	fnd_attached_documents fad,
480 		fnd_documents fd,
481 		fnd_documents_tl fdtl
482 	  WHERE	fad.document_id = fd.document_id
483 	    AND fd.document_id = fdtl.document_id
484 	    AND fdtl.language  = userenv('LANG')
485 	    AND fad.entity_name = X_from_entity_name
486 	    AND fad.pk1_value = X_from_pk1_value
487 	    AND (X_from_category_id IS NULL
488 		 OR (fad.category_id = X_from_category_id
489 		 OR (fad.category_id is NULL AND fd.category_id = X_from_category_id)))
490 	    AND fad.automatically_added_flag like decode(X_automatically_added_flag,NULL,'%',X_automatically_added_flag);
491 
492 
493 CURSOR docpk2 IS
494 	SELECT fad.seq_num, fad.document_id,
495 		fad.attribute_category, fad.attribute1, fad.attribute2,
496 		fad.attribute3, fad.attribute4, fad.attribute5,
497 		fad.attribute6, fad.attribute7, fad.attribute8,
498 		fad.attribute9, fad.attribute10, fad.attribute11,
499 		fad.attribute12, fad.attribute13, fad.attribute14,
500 		fad.attribute15, fad.column1, fad.automatically_added_flag,
501 		fad.category_id att_cat, fad.pk2_value, fad.pk3_value,
502                 fad.pk4_value, fad.pk5_value,
503 		fd.datatype_id, fd.category_id, fd.security_type, fd.security_id,
504 		fd.publish_flag, fd.image_type, fd.storage_type,
505 		fd.usage_type, fd.start_date_active, fd.end_date_active,
506 		fdtl.language, fdtl.description, fd.file_name,
507 		fd.media_id, fdtl.doc_attribute_category dattr_cat,
508 		fdtl.doc_attribute1 dattr1, fdtl.doc_attribute2 dattr2,
509 		fdtl.doc_attribute3 dattr3, fdtl.doc_attribute4 dattr4,
510 		fdtl.doc_attribute5 dattr5, fdtl.doc_attribute6 dattr6,
511 		fdtl.doc_attribute7 dattr7, fdtl.doc_attribute8 dattr8,
512 		fdtl.doc_attribute9 dattr9, fdtl.doc_attribute10 dattr10,
513 		fdtl.doc_attribute11 dattr11, fdtl.doc_attribute12 dattr12,
514 		fdtl.doc_attribute13 dattr13, fdtl.doc_attribute14 dattr14,
515 		fdtl.doc_attribute15 dattr15, fd.url, fdtl.title
516 	  FROM 	fnd_attached_documents fad,
517 		fnd_documents fd,
518 		fnd_documents_tl fdtl
519 	  WHERE	fad.document_id = fd.document_id
520 	    AND fd.document_id = fdtl.document_id
521 	    AND fdtl.language  = userenv('LANG')
522 	    AND fad.entity_name = X_from_entity_name
523 	    AND fad.pk1_value = X_from_pk1_value
524 	    AND fad.pk2_value = X_from_pk2_value
525 	    AND (X_from_category_id IS NULL
526 		 OR (fad.category_id = X_from_category_id
527 		 OR (fad.category_id is NULL AND fd.category_id = X_from_category_id)))
528 	    AND fad.automatically_added_flag like decode(X_automatically_added_flag,NULL,'%',X_automatically_added_flag);
529 
530 
531 
532 
533 CURSOR docpk3 IS
534 	SELECT fad.seq_num, fad.document_id,
535 		fad.attribute_category, fad.attribute1, fad.attribute2,
536 		fad.attribute3, fad.attribute4, fad.attribute5,
540 		fad.attribute15, fad.column1, fad.automatically_added_flag,
537 		fad.attribute6, fad.attribute7, fad.attribute8,
538 		fad.attribute9, fad.attribute10, fad.attribute11,
539 		fad.attribute12, fad.attribute13, fad.attribute14,
541 		fad.category_id att_cat, fad.pk2_value, fad.pk3_value,
542                 fad.pk4_value, fad.pk5_value,
543 		fd.datatype_id, fd.category_id, fd.security_type, fd.security_id,
544 		fd.publish_flag, fd.image_type, fd.storage_type,
545 		fd.usage_type, fd.start_date_active, fd.end_date_active,
546 		fdtl.language, fdtl.description, fd.file_name,
547 		fd.media_id, fdtl.doc_attribute_category dattr_cat,
548 		fdtl.doc_attribute1 dattr1, fdtl.doc_attribute2 dattr2,
549 		fdtl.doc_attribute3 dattr3, fdtl.doc_attribute4 dattr4,
550 		fdtl.doc_attribute5 dattr5, fdtl.doc_attribute6 dattr6,
551 		fdtl.doc_attribute7 dattr7, fdtl.doc_attribute8 dattr8,
552 		fdtl.doc_attribute9 dattr9, fdtl.doc_attribute10 dattr10,
553 		fdtl.doc_attribute11 dattr11, fdtl.doc_attribute12 dattr12,
554 		fdtl.doc_attribute13 dattr13, fdtl.doc_attribute14 dattr14,
555 		fdtl.doc_attribute15 dattr15, fd.url, fdtl.title
556 	  FROM 	fnd_attached_documents fad,
557 		fnd_documents fd,
558 		fnd_documents_tl fdtl
559 	  WHERE	fad.document_id = fd.document_id
560 	    AND fd.document_id = fdtl.document_id
561 	    AND fdtl.language  = userenv('LANG')
562 	    AND fad.entity_name = X_from_entity_name
563 	    AND fad.pk1_value = X_from_pk1_value
564 	    AND fad.pk2_value = X_from_pk2_value
565             AND fad.pk3_value = X_from_pk3_value
566 	    AND (X_from_category_id IS NULL
567 		 OR (fad.category_id = X_from_category_id
568 		 OR (fad.category_id is NULL AND fd.category_id = X_from_category_id)))
569 	    AND fad.automatically_added_flag like decode(X_automatically_added_flag,NULL,'%',X_automatically_added_flag);
570 
571 
572 
573 
574 CURSOR doclist IS
575 	SELECT fad.seq_num, fad.document_id,
576 		fad.attribute_category, fad.attribute1, fad.attribute2,
577 		fad.attribute3, fad.attribute4, fad.attribute5,
578 		fad.attribute6, fad.attribute7, fad.attribute8,
579 		fad.attribute9, fad.attribute10, fad.attribute11,
580 		fad.attribute12, fad.attribute13, fad.attribute14,
581 		fad.attribute15, fad.column1, fad.automatically_added_flag,
582 		fad.category_id att_cat, fad.pk2_value, fad.pk3_value,
583                 fad.pk4_value, fad.pk5_value,
584 		fd.datatype_id, fd.category_id, fd.security_type, fd.security_id,
585 		fd.publish_flag, fd.image_type, fd.storage_type,
586 		fd.usage_type, fd.start_date_active, fd.end_date_active,
587 		fdtl.language, fdtl.description, fd.file_name,
588 		fd.media_id, fdtl.doc_attribute_category dattr_cat,
589 		fdtl.doc_attribute1 dattr1, fdtl.doc_attribute2 dattr2,
590 		fdtl.doc_attribute3 dattr3, fdtl.doc_attribute4 dattr4,
591 		fdtl.doc_attribute5 dattr5, fdtl.doc_attribute6 dattr6,
592 		fdtl.doc_attribute7 dattr7, fdtl.doc_attribute8 dattr8,
593 		fdtl.doc_attribute9 dattr9, fdtl.doc_attribute10 dattr10,
594 		fdtl.doc_attribute11 dattr11, fdtl.doc_attribute12 dattr12,
595 		fdtl.doc_attribute13 dattr13, fdtl.doc_attribute14 dattr14,
596 		fdtl.doc_attribute15 dattr15, fd.url, fdtl.title
597 	  FROM 	fnd_attached_documents fad,
598 		fnd_documents fd,
599 		fnd_documents_tl fdtl
600 	  WHERE	fad.document_id = fd.document_id
601 	    AND fd.document_id = fdtl.document_id
602 	    AND fdtl.language  = userenv('LANG')
603 	    AND fad.entity_name = X_from_entity_name
604 	    AND fad.pk1_value = X_from_pk1_value
605 	    AND (X_from_pk2_value IS NULL
606 		 OR fad.pk2_value = X_from_pk2_value)
607 	    AND (X_from_pk3_value IS NULL
608 		 OR fad.pk3_value = X_from_pk3_value)
609 	    AND (X_from_pk4_value IS NULL
610 		 OR fad.pk4_value = X_from_pk4_value)
611 	    AND (X_from_pk5_value IS NULL
612 		 OR fad.pk5_value = X_from_pk5_value)
613 	    AND (X_from_category_id IS NULL
614 		 OR (fad.category_id = X_from_category_id
615 		 OR (fad.category_id is NULL AND fd.category_id = X_from_category_id)))
616 	    AND fad.automatically_added_flag like decode(X_automatically_added_flag,NULL,'%',X_automatically_added_flag);
617 
618 
619 
620 
621    CURSOR shorttext (mid NUMBER) IS
622 	SELECT short_text
623 	  FROM fnd_documents_short_text
624 	 WHERE media_id = mid;
625 
626    CURSOR longtext (mid NUMBER) IS
627 	SELECT long_text
628 	  FROM fnd_documents_long_text
629 	 WHERE media_id = mid;
630 
631    CURSOR fnd_lobs_cur (mid NUMBER) IS
632         SELECT file_id,
633                file_name,
634                file_content_type,
635                upload_date,
636                expiration_date,
637                program_name,
638                program_tag,
639                file_data,
640                language,
641                oracle_charset,
642                file_format
643         FROM fnd_lobs
644         WHERE file_id = mid;
645 
646    media_id_tmp NUMBER;
647    document_id_tmp NUMBER;
648    row_id_tmp VARCHAR2(30);
649    short_text_tmp VARCHAR2(4000);
650    long_text_tmp VARCHAR2(32767);
651    docrec doclist%ROWTYPE;
652    fnd_lobs_rec fnd_lobs_cur%ROWTYPE;
653 BEGIN
654 	--  Use cursor loop to get all attachments associated with
655 	--  the from_entity
656 	IF (X_from_entity_name IS NULL OR X_from_pk1_value IS NULL) THEN
657 		RETURN;
658         END IF;
659 
660         IF    X_from_pk2_value IS NULL THEN -- performance change IF
661           OPEN docpk1;
665           OPEN docpk3;
662         ELSIF X_from_pk3_value IS NULL THEN
663           OPEN docpk2;
664         ELSIF X_from_pk4_value IS NULL THEN
666         ELSE
667           OPEN doclist;
668         END IF;
669 
670         <<pkloop>>
671         LOOP
672 
673           IF    X_from_pk2_value IS NULL THEN -- performance change IF
674            FETCH docpk1 INTO docrec;
675            --EXIT
676            IF (docpk1%notfound) then
677               EXIT pkloop;
678            END IF;
679           ELSIF X_from_pk3_value IS NULL THEN
680            FETCH docpk2 INTO docrec;
681            IF (docpk2%notfound) then
682               EXIT pkloop;
683            END IF;
684           ELSIF X_from_pk4_value IS NULL THEN
685            FETCH docpk3 INTO docrec;
686            IF (docpk3%notfound) then
687               EXIT pkloop;
688            END IF;
689           ELSE
690            FETCH doclist INTO docrec;
691            IF (doclist%notfound) then
692               EXIT pkloop;
693            END IF;
694           END IF;
695 
696                 --FOR docrec IN doclist LOOP
697 		--  One-Time docs that Short Text or Long Text will have
698 		--  to be copied into a new document (Long Text will be
699 		--  truncated to 32K).  Create the new document records
700 		--  before creating the attachment record
701 		--
702 		IF (docrec.usage_type = 'O'
703 		    AND docrec.datatype_id IN (1,2,5,6) ) THEN
704 			--  Create Documents records
705 			FND_DOCUMENTS_PKG.Insert_Row(row_id_tmp,
706 		                document_id_tmp,
707 				SYSDATE,
708 				NVL(X_created_by,0),
709 				SYSDATE,
710 				NVL(X_created_by,0),
711 				X_last_update_login,
712 				docrec.datatype_id,
713 				NVL(X_to_category_id, docrec.category_id),
714 				docrec.security_type,
715 				docrec.security_id,
716 				docrec.publish_flag,
717 				docrec.image_type,
718 				docrec.storage_type,
719 				docrec.usage_type,
720 				docrec.start_date_active,
721 				docrec.end_date_active,
722 				X_request_id,
723 				X_program_application_id,
724 				X_program_id,
725 				SYSDATE,
726 				docrec.language,
727 				docrec.description,
728 				docrec.file_name,
729 				media_id_tmp,
730 				docrec.dattr_cat, docrec.dattr1,
731 				docrec.dattr2, docrec.dattr3,
732 				docrec.dattr4, docrec.dattr5,
733 				docrec.dattr6, docrec.dattr7,
734 				docrec.dattr8, docrec.dattr9,
735 				docrec.dattr10, docrec.dattr11,
736 				docrec.dattr12, docrec.dattr13,
737 				docrec.dattr14, docrec.dattr15,
738                                 'N',docrec.url, docrec.title);
739 
740 			--  overwrite document_id from original
741 			--  cursor for later insert into
742 			--  fnd_attached_documents
743 			docrec.document_id := document_id_tmp;
744 
745 			--  Duplicate short or long text
746 			IF (docrec.datatype_id = 1) THEN
747 				--  Handle short Text
748 				--  get original data
749 				OPEN shorttext(docrec.media_id);
750 				FETCH shorttext INTO short_text_tmp;
751 				CLOSE shorttext;
752 
753 				INSERT INTO fnd_documents_short_text (
754 					media_id,
755 					short_text)
756 				 VALUES (
757 					media_id_tmp,
758 					short_text_tmp);
759 			media_id_tmp := '';
760 
761 			ELSIF (docrec.datatype_id = 2) THEN
762 				--  Handle long text
763 				--  get original data
764 				OPEN longtext(docrec.media_id);
765 				FETCH longtext INTO long_text_tmp;
766 				CLOSE longtext;
767 
768 				INSERT INTO fnd_documents_long_text (
769 					media_id,
770 					long_text)
771 				 VALUES (
772 					media_id_tmp,
773 					long_text_tmp);
774 			media_id_tmp := '';
775 
776 		        ELSIF (docrec.datatype_id=6) THEN
777 
778                          OPEN fnd_lobs_cur(docrec.media_id);
779                          FETCH fnd_lobs_cur
780                            INTO fnd_lobs_rec.file_id,
781                                 fnd_lobs_rec.file_name,
782                                 fnd_lobs_rec.file_content_type,
783                                 fnd_lobs_rec.upload_date,
784                                 fnd_lobs_rec.expiration_date,
785                                 fnd_lobs_rec.program_name,
786                                 fnd_lobs_rec.program_tag,
787                                 fnd_lobs_rec.file_data,
788                                 fnd_lobs_rec.language,
789                                 fnd_lobs_rec.oracle_charset,
790                                 fnd_lobs_rec.file_format;
791                          CLOSE fnd_lobs_cur;
792 
793              INSERT INTO fnd_lobs (
794                                  file_id,
795                                  file_name,
796                                  file_content_type,
797                                  upload_date,
798                                  expiration_date,
799                                  program_name,
800                                  program_tag,
801                                  file_data,
802                                  language,
803                                  oracle_charset,
804                                  file_format)
805                VALUES  (
809                        fnd_lobs_rec.upload_date,
806                        media_id_tmp,
807                        fnd_lobs_rec.file_name,
808                        fnd_lobs_rec.file_content_type,
810                        fnd_lobs_rec.expiration_date,
811                        fnd_lobs_rec.program_name,
812                        fnd_lobs_rec.program_tag,
813                        fnd_lobs_rec.file_data,
814                        fnd_lobs_rec.language,
815                        fnd_lobs_rec.oracle_charset,
816                        fnd_lobs_rec.file_format);
817 
818                        media_id_tmp := '';
819 
820 		  END IF;  -- end of duplicating text
821 
822 
823 		END IF;   --  end if usage_type = 'O' and datatype in (1,2,6)
824 
825 		--  Create attachment record
826 		INSERT INTO fnd_attached_documents
827 		(attached_document_id,
828 		document_id,
829 		creation_date,
830 		created_by,
831 		last_update_date,
832 		last_updated_by,
833 		last_update_login,
834 		seq_num,
835 		entity_name,
836 		pk1_value, pk2_value, pk3_value,
837 		pk4_value, pk5_value,
838 		automatically_added_flag,
839 		program_application_id, program_id,
840 		program_update_date, request_id,
841 		attribute_category, attribute1,
842 		attribute2, attribute3, attribute4,
843 		attribute5, attribute6, attribute7,
844 		attribute8, attribute9, attribute10,
845 		attribute11, attribute12, attribute13,
846 		attribute14, attribute15, column1, category_id) VALUES
847 		(fnd_attached_documents_s.nextval,
848 		docrec.document_id,
849 		sysdate,
850 		NVL(X_created_by,0),
851 		sysdate,
852 		NVL(X_created_by,0),
853 		X_last_update_login,
854 		docrec.seq_num,
855 		X_to_entity_name,
856 		X_to_pk1_value,
857                 X_to_pk2_value,
858                 X_to_pk3_value,
859 		X_to_pk4_value,
860                 X_to_pk5_value,
861 		docrec.automatically_added_flag,
862 		X_program_application_id, X_program_id,
863 		sysdate, X_request_id,
864 		docrec.attribute_category, docrec.attribute1,
865 		docrec.attribute2, docrec.attribute3,
866 		docrec.attribute4, docrec.attribute5,
867 		docrec.attribute6, docrec.attribute7,
868 		docrec.attribute8, docrec.attribute9,
869 		docrec.attribute10, docrec.attribute11,
870 		docrec.attribute12, docrec.attribute13,
871 		docrec.attribute14, docrec.attribute15,
872 		docrec.column1,
873 		NVL(X_to_category_id, NVL(docrec.att_cat, docrec.category_id)));
874 
875 		--  Update the document to be a std document if it
876 		--  was an ole or image that wasn't already a std doc
877 		--  (images should be created as Std, but just in case)
878 		IF (docrec.datatype_id IN (3,4)
879 		    AND docrec.usage_type <> 'S') THEN
880 			UPDATE fnd_documents
881 			   SET usage_type = 'S'
882 			WHERE document_id = docrec.document_id;
883 		END IF;
884 
885 	END LOOP;  --  end of working through all attachments
886 --  close cursors.
887         IF    X_from_pk2_value IS NULL THEN -- performance change IF
888           CLOSE docpk1;
889         ELSIF X_from_pk3_value IS NULL THEN
890           CLOSE docpk2;
891         ELSIF X_from_pk4_value IS NULL THEN
892           CLOSE docpk3;
893         ELSE
894           CLOSE doclist;
895         END IF;
896 
897        EXCEPTION WHEN OTHERS THEN
898        -- need to close all cursors
899        CLOSE docpk1;
900        CLOSE docpk2;
901        CLOSE docpk3;
902        CLOSE doclist;
903        CLOSE shorttext;
904        CLOSE longtext;
905        CLOSE fnd_lobs_cur;
906 
907 END copy_attachments;
908 
909 
910 END fnd_attached_documents2_pkg;