This post gives some helpful queries when working on FND Attachment tables. I have also given a sample program to extract these attachment into file system.
Attachment Types are stored in the fnd_document_datatypes table.
select * from fnd_document_datatypes;
Query to retrieve the 'Short Text' Attachments:
Query to retrieve the 'Long Text' Attachments:
Query to retrieve the 'File' Attachments:
Query to retrieve the 'Web Page' Attachments:
Sample program to extract the attachments into file system.
Note: The oracle directory object 'XX_EXTRACT_DIR' should be created before running the script. Refer the below blog to see how to use utl_file package.
Johny's Oracle Tips: PL/SQL: Sample code for UTL_FILE
Feel free to point out if anything is missing/wrong in this blog.
Attachment Types are stored in the fnd_document_datatypes table.
select * from fnd_document_datatypes;
Query to retrieve the 'Short Text' Attachments:
select fad.document_id
,fad.entity_name
,fad.pk1_value
,fad.pk2_value
,fdct.user_name "Category"
,fdd.user_name "Type"
,fds.short_text
,(fad.entity_name || '_' || fad.document_id ||'_ST.txt') file_name
from fnd_attached_documents fad
,fnd_documents fd
,fnd_documents_short_text fds
,fnd_document_datatypes fdd
,fnd_document_categories_tl fdct
where fad.document_id = fd.document_id
and fd.media_id = fds.media_id
and fd.datatype_id = fdd.datatype_id
and fd.category_id = fdct.category_id
and fdd.user_name = 'Short Text'
and fad.entity_name = :p_entity_name -- replace with the entity_name you want to extract.
order by fad.pk1_value, pk2_value;
Query to retrieve the 'Long Text' Attachments:
select fad.entity_name
,fad.document_id
,fad.pk1_value
,fad.pk2_value
,fdct.user_name "Category"
,fdd.user_name "Type"
,fdl.long_text
,(fad.entity_name || '_' || fad.document_id ||'_LT.txt') file_name
from fnd_attached_documents fad
,fnd_documents fd
,fnd_documents_long_text fdl
,fnd_document_datatypes fdd
,fnd_document_categories_tl fdct
where fad.document_id = fd.document_id
and fd.media_id = fdl.media_id
and fd.datatype_id = fdd.datatype_id
and fd.category_id = fdct.category_id
and fdd.user_name = 'Long Text'
and fad.entity_name = :p_entity_name -- replace with the entity_name you want to extract.
order by fad.pk1_value, pk2_value;
Query to retrieve the 'File' Attachments:
select fad.entity_name
,fad.document_id
,fad.pk1_value
,fad.pk2_value
,fdct.user_name "Category"
,fdd.user_name "Type"
,fd.datatype_id
,(fad.entity_name || '_' || fad.document_id ||'_' || fl.file_name) file_name
,fl.file_data
from fnd_attached_documents fad
,fnd_documents fd
,fnd_lobs fl
,fnd_document_datatypes fdd
,fnd_document_categories_tl fdct
where fad.document_id = fd.document_id
and fd.media_id = fl.file_id
and fd.datatype_id = fdd.datatype_id
and fd.category_id = fdct.category_id
and fdd.user_name = 'File'
and fad.entity_name = :p_entity_name -- replace with the entity_name you want to extract.
order by fad.pk1_value, pk2_value;
Query to retrieve the 'Web Page' Attachments:
select fad.entity_name
,fad.document_id
,fad.pk1_value
,fad.pk2_value
,fdct.user_name "Category"
,fdd.user_name "Type"
,(fad.entity_name || '_' || fad.document_id ||'_URL.txt') file_name
,fd.url
from fnd_attached_documents fad
,fnd_documents fd
,fnd_document_datatypes fdd
,fnd_document_categories_tl fdct
where fad.document_id = fd.document_id
and fd.datatype_id = fdd.datatype_id
and fd.category_id = fdct.category_id
and fdd.user_name = 'Web Page'
and fad.entity_name = :p_entity_name -- replace with the entity_name you want to extract.
order by fad.pk1_value, pk2_value;
Sample program to extract the attachments into file system.
declare
v_file utl_file.file_type;
v_line varchar2(1000);
v_blob_len number;
v_pos number;
v_buffer raw(32764);
v_amt binary_integer := 32764;
cursor cur_short_text_files
is
select fad.entity_name
,fad.document_id
,fad.pk1_value
,fad.pk2_value
,fds.short_text
,(fad.entity_name || '_' || fad.document_id ||'_ST.txt') file_name
from fnd_attached_documents fad
,fnd_documents fd
,fnd_documents_short_text fds
,fnd_document_datatypes fdd
where fad.document_id = fd.document_id
and fd.media_id = fds.media_id
and fd.datatype_id = fdd.datatype_id
and fdd.user_name = 'Short Text'
and fad.entity_name = :p_entity_name -- replace with the entity_name you want to extract.
order by fad.pk1_value, pk2_value;
cursor cur_long_text_files
is
select fad.entity_name
,fad.document_id
,fad.pk1_value
,fad.pk2_value
,fdl.long_text
,(fad.entity_name || '_' || fad.document_id ||'_LT.txt') file_name
from fnd_attached_documents fad
,fnd_documents fd
,fnd_documents_long_text fdl
,fnd_document_datatypes fdd
where fad.document_id = fd.document_id
and fd.media_id = fdl.media_id
and fd.datatype_id = fdd.datatype_id
and fdd.user_name = 'Long Text'
and fad.entity_name = :p_entity_name -- replace with the entity_name you want to extract.
order by fad.pk1_value, pk2_value;
cursor cur_files
is
select fad.entity_name
,fad.document_id
,fad.pk1_value
,fad.pk2_value
,fd.datatype_id
,(fad.entity_name || '_' || fad.document_id ||'_' || fl.file_name) file_name
,fl.file_data
from fnd_attached_documents fad
,fnd_documents fd
,fnd_lobs fl
,fnd_document_datatypes fdd
where fad.document_id = fd.document_id
and fd.media_id = fl.file_id
and fd.datatype_id = fdd.datatype_id
and fdd.user_name = 'File'
and fad.entity_name = :p_entity_name -- replace with the entity_name you want to extract.
order by fad.pk1_value, pk2_value;
cursor cur_url_files
is
select fad.entity_name
,fad.document_id
,fad.pk1_value
,fad.pk2_value
,(fad.entity_name || '_' || fad.document_id ||'_URL.txt') file_name
,fd.url
from fnd_attached_documents fad
,fnd_documents fd
,fnd_document_datatypes fdd
where fad.document_id = fd.document_id
and fd.datatype_id = fdd.datatype_id
and fdd.user_name = 'Web Page'
and fad.entity_name = :p_entity_name -- replace with the entity_name you want to extract.
order by fad.pk1_value, pk2_value;
begin
-- Short Text Attachments
for c_file in cur_short_text_files
loop
v_file := utl_file.fopen('XX_EXTRACT_DIR',c_file.file_name, 'W', 32764);
utl_file.put(v_file,c_file.short_text);
utl_file.fclose(v_file);
end loop;
-- Long Text Attachments
for c_file in cur_long_text_files
loop
v_file := utl_file.fopen('XX_EXTRACT_DIR',c_file.file_name, 'W', 32764);
utl_file.put(v_file,c_file.long_text);
utl_file.fclose(v_file);
end loop;
-- File Attachments
for c_file in cur_files
loop
v_file := utl_file.fopen('XX_EXTRACT_DIR',c_file.file_name, 'wb', 32764);
v_blob_len := dbms_lob.getlength(c_file.file_data);
v_pos := 1;
while v_pos < v_blob_len
loop
dbms_lob.read(c_file.file_data,v_amt,v_pos,v_buffer);
utl_file.put_raw(v_file,v_buffer,true);
v_pos := v_pos + v_amt;
end loop;
utl_file.fclose(v_file);
end loop;
--Web Page Attachments
for c_file in cur_url_files
loop
v_file := utl_file.fopen('XX_EXTRACT_DIR',c_file.file_name, 'W', 32764);
utl_file.put(v_file,c_file.url);
utl_file.fclose(v_file);
end loop;
end;
Note: The oracle directory object 'XX_EXTRACT_DIR' should be created before running the script. Refer the below blog to see how to use utl_file package.
Johny's Oracle Tips: PL/SQL: Sample code for UTL_FILE
Feel free to point out if anything is missing/wrong in this blog.
Hi Anoop Johny,
ReplyDeleteI am stuck in making attachment mandatory for OAF Page (ebs 12.2.7).
On creating Work Confirmation for Approved PO (Purchasing Super User -> Buyer Work Center -> Orders)
There is an AttachmentBean on pay-items,
requirement is to make that Attachment as mandatory.
I have read some articles and came to know that its possible in OAF through CO Extension.
http://oracleappsamit.blogspot.com/2013/05/how-can-we-mandatory-attachment-in-oaf.html
But I am not getting where should i get from UploadBeanID ?
OR
Is there any other way to make this Attachment as mandatory so that if user wish to submit without uploading attachment, page should throw exception.
Hi..
DeleteDid you get the solution for this?
It helped a lot. Thanks.
ReplyDelete