DBA Data[Home] [Help]

PACKAGE BODY: APPS.DOM_DOC_TEXT_UTIL

Source


1 PACKAGE BODY DOM_DOC_TEXT_UTIL AS
2 /* $Header: DOMUIMTB.pls 120.5 2011/03/30 06:23:41 pnagasur ship $ */
3 
4 G_PKG_NAME		CONSTANT  VARCHAR2(30)  :=  'DOM_DOC_TEXT_UTIL';
5 
6 -- -----------------------------------------------------------------------------
7 --  				Private Globals
8 -- -----------------------------------------------------------------------------
9 
10 g_Prod_Short_Name	CONSTANT  VARCHAR2(30)  :=  'DOM';
11 g_Prod_Schema		VARCHAR2(30);
12 g_Index_Owner		VARCHAR2(30);
13 g_Index_Name            VARCHAR2(30)    :=  'DOM_IMTEXT_TL_CTX1';
14 g_Indexing_Context	VARCHAR2(30)    :=  'SYNC_INDEX';
15 
16 g_installed		BOOLEAN;
17 g_inst_status		VARCHAR2(1);
18 g_industry		VARCHAR2(1);
19 
20 g_DB_Version_Num	NUMBER        :=  NULL;
21 g_DB_Version_Str	VARCHAR2(30)  :=  NULL;
22 g_compatibility		VARCHAR2(30)  :=  NULL;
23 
24 g_MSTK_Flex_Delimiter	VARCHAR2(1)   :=  NULL;
25 
26 --c_Dom_Appl_Id		CONSTANT  NUMBER        :=  703;
27 --c_Dom_DFF_Name		CONSTANT  VARCHAR2(30)  :=  'DOM_DOC_GROUP';
28 
29 -- Global debug flag
30 g_Debug			BOOLEAN  :=  TRUE;
31 
32 t_temp			NUMBER := 0;
33 
34 --Bug 4045988
35 l_DB_Version_Str        VARCHAR2(30)           :=  NULL;
36 l_DB_Numeric_Character  VARCHAR2(30)           :=  NULL;
37 --Bug 4045988
38 
39 
40    -- Variable used to buffer text strings before writing into LOB.
41    --
42    g_Buffer			VARCHAR2(32767);
43    g_Buffer_Length		INTEGER;
44 
45 /*
46 -- -----------------------------------------------------------------------------
47 --					Debug
48 -- -----------------------------------------------------------------------------
49 
50 PROCEDURE Debug
51 (
52    p_change_id     IN    NUMBER
53 ,  p_org_id        IN    NUMBER
54 ,  p_msg_name      IN    VARCHAR2
55 ,  p_error_text    IN    VARCHAR2
56 );
57 */
58 -- -----------------------------------------------------------------------------
59 --  				Set_Context
60 -- -----------------------------------------------------------------------------
61 
62 PROCEDURE Set_Context ( p_context  IN  VARCHAR2 )
63 IS
64 BEGIN
65    g_Indexing_Context := p_context;
66 END Set_Context;
67 
68 -- -----------------------------------------------------------------------------
69 --				Append_VARCHAR_to_LOB
70 -- -----------------------------------------------------------------------------
71 
72 PROCEDURE Append_VARCHAR_to_LOB
73 (
74    x_tlob      IN OUT NOCOPY  CLOB
75 ,  p_string    IN             VARCHAR2
76 ,  p_action    IN             VARCHAR2  DEFAULT  'APPEND'
77 )
78 IS
79    start_writing	BOOLEAN  :=  TRUE;
80    l_offset		INTEGER  :=  1;
81    l_Max_Length		INTEGER  :=  32767;
82    l_String_Length	INTEGER;
83 BEGIN
84 
85    IF ( p_action = 'BEGIN' ) THEN
86 
87       -- Empty the LOB, if this is the first chunk of text to append
88       DBMS_LOB.Trim ( lob_loc => x_tlob, newlen => 0 );
89 
90       g_Buffer := p_string;
91       g_Buffer_Length := -1;
92 
93    ELSIF ( p_action IN ('APPEND', 'END') ) THEN
94 
95       start_writing := ( g_Buffer_Length = -1 );
96       IF ( start_writing ) THEN
97          g_Buffer_Length := Length (g_Buffer);
98       END IF;
99 
100       l_String_Length := Length (p_string);
101 
102       -- Write buffer to LOB if required
103 
104       IF ( g_Buffer_Length + l_String_Length >= l_Max_Length ) THEN
105          IF ( start_writing ) THEN
106             DBMS_LOB.Write (  lob_loc  =>  x_tlob
107                            ,  amount   =>  Length (g_Buffer)
108                            ,  offset   =>  l_offset
109                            ,  buffer   =>  g_Buffer
110                            );
111          ELSE
112             DBMS_LOB.WriteAppend (  lob_loc  =>  x_tlob
113                                  ,  amount   =>  Length (g_Buffer)
114                                  ,  buffer   =>  g_Buffer
115                                  );
116          END IF;
117 
118          -- Reset buffer
119          g_Buffer := p_string;
120          g_Buffer_Length := Length (g_Buffer);
121       ELSE
122          g_Buffer := g_Buffer || p_string;
123          g_Buffer_Length := g_Buffer_Length + l_String_Length;
124       END IF;  -- Max_Length reached
125 
126       IF ( p_action = 'END' ) THEN
127          start_writing := ( g_Buffer_Length = -1 );
128          IF ( start_writing ) THEN
129             DBMS_LOB.Write (  lob_loc  =>  x_tlob
130                            ,  amount   =>  Length (g_Buffer)
131                            ,  offset   =>  l_offset
132                            ,  buffer   =>  g_Buffer
133                            );
134          ELSE
135             DBMS_LOB.WriteAppend (  lob_loc  =>  x_tlob
136                                  ,  amount   =>  Length (g_Buffer)
137                                  ,  buffer   =>  g_Buffer
138                                  );
139          END IF;
140          -- Reset buffer
141          g_Buffer := '';
142          g_Buffer_Length := -1;
143       END IF;
144 
145    END IF;  -- p_action
146 
147 END Append_VARCHAR_to_LOB;
148 
149 -- -----------------------------------------------------------------------------
150 --				Get_doc_Text
151 -- -----------------------------------------------------------------------------
152 
153 PROCEDURE Get_doc_Text
154 (
155    p_rowid          IN             ROWID
156 ,  p_output_type    IN             VARCHAR2
157 ,  x_tlob           IN OUT NOCOPY  CLOB
158 ,  x_tchar          IN OUT NOCOPY  VARCHAR2
159 )
160 IS
161 
162 BEGIN
163 NULL;
164 
165 --Null out this method, as it is not referred anywhere ,also Document Management is no longer supported
166 
167 END Get_doc_Text;
168 
169 /*
170 -- -----------------------------------------------------------------------------
171 --					Debug
172 -- -----------------------------------------------------------------------------
173 
174 PROCEDURE Debug
175 (
176    p_change_id     IN    NUMBER
177 ,  p_org_id        IN    NUMBER
178 ,  p_msg_name      IN    VARCHAR2
179 ,  p_error_text    IN    VARCHAR2
180 )
181 IS
182 
183 BEGIN
184 --Null out this method, as it is not referred anywhere ,also Document Management is no longer supported
185 
186 END Debug;
187 */
188 -- -----------------------------------------------------------------------------
189 --  				  Print_Lob
190 -- -----------------------------------------------------------------------------
191 
192 PROCEDURE Print_Lob ( p_tlob_loc  IN  CLOB )
193 IS
194    l_amount		BINARY_INTEGER    :=  255;
195    l_offset		INTEGER           :=  1;
196    l_offset_max		INTEGER           :=  32767;
197    l_buffer		VARCHAR2(32767);
198 BEGIN
199 
200    --DBMS_OUTPUT.put_line('LOB contents:');
201 
202    -- Read portions of LOB
203    LOOP
204       DBMS_LOB.Read (  lob_loc  =>  p_tlob_loc
205                     ,  amount   =>  l_amount
206                     ,  offset   =>  l_offset
207                     ,  buffer   =>  l_buffer
208                     );
209 
210       --DBMS_OUTPUT.put_line(l_buffer);
211 
212       l_offset := l_offset + l_amount;
213       EXIT WHEN l_offset > l_offset_max;
214    END LOOP;
215 
216 EXCEPTION
217    WHEN no_data_found THEN
218       NULL;
219 
220 END Print_Lob;
221 
222 
223 
224 -- -----------------------------------------------------------------------------
225 --  				Sync_Index
226 -- -----------------------------------------------------------------------------
227 
228 PROCEDURE Sync_Index ( p_idx_name  IN  VARCHAR2    DEFAULT  NULL )
229 IS
230 BEGIN
231 
232    AD_CTX_DDL.Sync_Index ( idx_name  =>  NVL(g_Index_Owner || '.' || p_idx_name, g_Index_Owner ||'.'|| g_Index_Name) );
233 
234 EXCEPTION
235    WHEN others THEN
236 	DOM_DOC_TEXT_PVT.Log_Line ('DOM_DOC_TEXT_UTIL : Error in Sync Index');
237 
238 END Sync_Index;
239 
240 -- -----------------------------------------------------------------------------
241 --  				Sync_Index_For_Forms
242 -- -----------------------------------------------------------------------------
243 
244 PROCEDURE Sync_Index_For_Forms ( p_idx_name  IN  VARCHAR2    DEFAULT  NULL )
245 IS
246 BEGIN
247 
248    EXECUTE IMMEDIATE 'ALTER INDEX ' || g_Index_Owner ||'.'|| g_Index_Name || ' REBUILD ONLINE PARAMETERS (''SYNC'')';
249 
250 EXCEPTION
251    WHEN others THEN
252 	NULL;
253 
254 	DOM_DOC_TEXT_PVT.Log_Line ('DOM_DOC_TEXT_UTIL : Error in Sync_Index_For_Forms');
255 
256 END Sync_Index_For_Forms;
257 -- -----------------------------------------------------------------------------
258 --  				Optimize_Index
259 -- -----------------------------------------------------------------------------
260 
261 -- Start : Concurrent Program for Optimize iM index
262 PROCEDURE Optimize_Index
263 (
264    ERRBUF      OUT NOCOPY VARCHAR2
265 ,  RETCODE     OUT NOCOPY NUMBER
266 ,  p_optlevel  IN         VARCHAR2 DEFAULT  AD_CTX_DDL.Optlevel_Full
267 ,  p_dummy     IN         VARCHAR2 DEFAULT  NULL
268 ,  p_maxtime   IN         NUMBER   DEFAULT  AD_CTX_DDL.Maxtime_Unlimited
269 )
270 IS
271 
272    Mctx        INV_ITEM_MSG.Msg_Ctx_type;
273    l_api_name  CONSTANT  VARCHAR2(30)  := 'Optimize_Index';
274    l_success   CONSTANT  NUMBER :=  0;
275    l_error     CONSTANT  NUMBER :=  2;
276    l_debug               NUMBER := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
277    l_maxtime             NUMBER := NVL(p_maxtime,AD_CTX_DDL.Maxtime_Unlimited);
278 
279 BEGIN
280 
281    IF p_optlevel ='FAST' THEN
282       l_maxtime := NULL;
283    END IF;
284 
285    AD_CTX_DDL.Optimize_Index ( idx_name  =>  g_Index_Owner ||'.'|| g_Index_Name
286                              , optlevel  =>  NVL(p_optlevel,AD_CTX_DDL.Optlevel_Full)
287                              , maxtime   =>  l_maxtime);
288 --gyedla Create Message
289    RETCODE := l_success;
290    ERRBUF  := FND_MESSAGE.Get_String('DOM', 'DOM_OPTIMINDEX_SUCCESS');
291 
292 --gyedla Create Message
293 
294 EXCEPTION
295    WHEN OTHERS THEN
296       RETCODE := l_error;
297       ERRBUF  := FND_MESSAGE.Get_String('DOM', 'DOM_OPTIMINDEX_FAILURE');
298       DOM_DOC_TEXT_PVT.Log_Line ('DOM_DOC_TEXT_UTIL : Error in Optimize Index for CM Text Index');
299 
300 END Optimize_Index;
301 -- End : Concurrent Program for Optimize iM index
302 
303 
304 -- -----------------------------------------------------------------------------
305 --				  get_Prod_Schema
306 -- -----------------------------------------------------------------------------
307 
308 FUNCTION get_Prod_Schema
309 RETURN VARCHAR2
310 IS
311 BEGIN
312    RETURN (g_Prod_Schema);
313 END get_Prod_Schema;
314 
315 -- -----------------------------------------------------------------------------
316 --				get_DB_Version_Num
317 -- -----------------------------------------------------------------------------
318 
319 FUNCTION get_DB_Version_Num
320 RETURN NUMBER
321 IS
322 BEGIN
323    RETURN (g_DB_Version_Num);
324 END get_DB_Version_Num;
325 
326 FUNCTION get_DB_Version_Str
327 RETURN VARCHAR2
328 IS
329 BEGIN
330    RETURN (g_DB_Version_Str);
331 END get_DB_Version_Str;
332 
333 -- -----------------------------------------------------------------------------
334 --				insert_document
338 (
335 -- -----------------------------------------------------------------------------
336 
337 PROCEDURE Insert_Update_Doc
339    p_doc_id            IN  NUMBER      DEFAULT  FND_API.G_MISS_NUM
340 )
341 IS
342 
343 BEGIN
344    --Null out this method, as it is not referred anywhere ,also Document Management is no longer supported
345        NULL;
346 END Insert_Update_Doc;
347 
348 -- *****************************************************************************
349 -- **                      Package initialization block                       **
350 -- *****************************************************************************
351 
352 BEGIN
353 
354    ------------------------------------------------------------------
355    -- Determine index schema and store in a private global variable
356    ------------------------------------------------------------------
357 
358    g_installed := FND_INSTALLATION.Get_App_Info ('DOM', g_inst_status, g_industry, g_Prod_Schema);
359 
360    g_Index_Owner := g_Prod_Schema;
361 
362    -------------------------
363    -- Determine DB version
364    -------------------------
365 
366    --Bug 5514824/4045988: We need to convert the db version string to be compativle with the
367    --numeric characters of that language. Eg. '9.2' need to be changed to '9F2'
368    -- in French before we can use it in TO_NUMBER
369 
370    DBMS_UTILITY.db_Version (g_DB_Version_Str, g_compatibility);
371    l_DB_Version_Str := SUBSTR(g_DB_Version_Str, 1, INSTR(g_DB_Version_Str, '.', 1, 2) - 1);
372 
373    SELECT SUBSTR(VALUE,0,1) into l_DB_Numeric_Character
374    FROM V$NLS_PARAMETERS
375    Where PARAMETER = 'NLS_NUMERIC_CHARACTERS';
376    g_DB_Version_Num := TO_NUMBER( REPLACE(l_DB_Version_Str, '.', l_DB_Numeric_Character) );
377 
378 
379 END DOM_DOC_TEXT_UTIL;