DBA Data[Home] [Help]

PACKAGE BODY: APPS.HR_XML_PUB_UTILITY

Source


1 PACKAGE BODY HR_XML_PUB_UTILITY AS
2 /* $Header: perxmlpb.pkb 120.0 2006/05/01 05:21 debhatta noship $ */
3 Procedure  clob_to_blob(p_clob clob
4 			,p_blob IN OUT NOCOPY blob)
5   is
6     l_proc    varchar2(100):= 'hr_xml_pub_utility.clob_to_blob';
7     l_length_clob number;
8     l_offset pls_integer;
9     l_varchar_buffer varchar2(32767);
10     l_raw_buffer raw(32767);
11     l_buffer_len number:= 20000;
12     l_chunk_len number;
13     l_blob blob;
14     g_nls_db_char varchar2(60);
15 
16     l_raw_buffer_len pls_integer;
17     l_blob_offset    pls_integer := 1;
18 
19   begin
20         hr_utility.set_location('Entered Procedure clob to blob',120);
21         select userenv('LANGUAGE') into g_nls_db_char from dual;
22         l_length_clob := dbms_lob.getlength(p_clob);
23         l_offset := 1;
24         while l_length_clob > 0 loop
25                 hr_utility.trace('l_length_clob '|| l_length_clob);
26                 if l_length_clob < l_buffer_len then
27                         l_chunk_len := l_length_clob;
28                 else
29                         l_chunk_len := l_buffer_len;
30                 end if;
31                 DBMS_LOB.READ(p_clob,l_chunk_len,l_offset,l_varchar_buffer);
32                 --l_raw_buffer := utl_raw.cast_to_raw(l_varchar_buffer);
33                 l_raw_buffer := utl_raw.convert(utl_raw.cast_to_raw(l_varchar_buffer),'American_America.UTF8',g_nls_db_char);
34                 l_raw_buffer_len := utl_raw.length(utl_raw.convert(utl_raw.cast_to_raw(l_varchar_buffer),'American_America.UTF8',g_nls_db_char));
35                 hr_utility.trace('l_varchar_buffer '|| l_varchar_buffer);
36                 --dbms_lob.write(p_blob,l_chunk_len, l_offset, l_raw_buffer);
37                 dbms_lob.write(p_blob,l_raw_buffer_len, l_blob_offset, l_raw_buffer);
38                 l_blob_offset := l_blob_offset + l_raw_buffer_len;
39 
40                 l_offset := l_offset + l_chunk_len;
41                 l_length_clob := l_length_clob - l_chunk_len;
42                 hr_utility.trace('l_length_blob '|| dbms_lob.getlength(p_blob));
43         end loop;
44 
45         exception
46         when others then
47           hr_utility.set_location(' Leaving: ' || l_proc, 100);
48           raise;
49   end;
50 
51 end HR_XML_PUB_UTILITY;