[Home] [Help]
PACKAGE BODY: APPS.XLA_CMP_COMMON_PKG
Source
1 PACKAGE BODY xla_cmp_common_pkg AS
2 /* $Header: xlacpcom.pkb 120.3 2006/06/16 00:55:17 jlarre ship $ */
3 /*======================================================================+
4 | Copyright (c) 1995-2002 Oracle Corporation |
5 | Redwood Shores, CA, USA |
6 | All rights reserved. |
7 +=======================================================================+
8 | PACKAGE NAME |
9 | xla_cmp_lock_pkg |
10 | |
11 | DESCRIPTION |
12 | Oracle Subledger Accounting Compiler Common Code |
13 | |
14 | HISTORY |
15 | 30-JAN-04 A.Quaglia Created |
16 | 15-MAY-2006 Jorge Larre Fix for bug 5330846. This is a temporary |
17 | fix until we get a confirmation from the ATG team that there |
18 | will only be one row in fnd_oracle_userid to retrieve the schema|
19 | name with read_only_flag = 'U'. In this temporary fix we assume |
20 | that the install_group_num is 1 (this is correct in the internal|
21 | databases). |
22 | |
23 +======================================================================*/
24
25 -- Private Constants
26 G_MAX_PACKAGE_LINE_LENGTH CONSTANT INTEGER := 255;
27 G_CHR_QUOTE CONSTANT VARCHAR2(9) :='''';
28 G_CHR_SPACE CONSTANT VARCHAR2(9) :=' ';
29 G_CHR_NEWLINE CONSTANT VARCHAR2(10) := xla_environment_pkg.g_chr_newline;
30
31
32 --
33 -- Private exceptions
34 --
35 le_resource_busy EXCEPTION;
39 --
36 PRAGMA exception_init(le_resource_busy, -00054);
37
38 le_fatal_error EXCEPTION;
40 -- Private types
41 --
42
43 --
44 -- Private constants
45 --
46
47 --
48 -- Global variables
49 --
50 g_user_id INTEGER := xla_environment_pkg.g_usr_id;
51 g_login_id INTEGER := xla_environment_pkg.g_login_id;
52 g_date DATE := SYSDATE;
53 g_prog_appl_id INTEGER := xla_environment_pkg.g_prog_appl_id;
54 g_prog_id INTEGER := xla_environment_pkg.g_prog_id;
55 g_req_id INTEGER := NVL(xla_environment_pkg.g_req_id, -1);
56
57 --
58
59 -- Cursor declarations
60 --
61
62
63
64 --=============================================================================
65 -- *********** Local Trace Routine **********
66 --=============================================================================
67 C_LEVEL_STATEMENT CONSTANT NUMBER := FND_LOG.LEVEL_STATEMENT;
68 C_LEVEL_PROCEDURE CONSTANT NUMBER := FND_LOG.LEVEL_PROCEDURE;
69 C_LEVEL_EVENT CONSTANT NUMBER := FND_LOG.LEVEL_EVENT;
70 C_LEVEL_EXCEPTION CONSTANT NUMBER := FND_LOG.LEVEL_EXCEPTION;
71 C_LEVEL_ERROR CONSTANT NUMBER := FND_LOG.LEVEL_ERROR;
72 C_LEVEL_UNEXPECTED CONSTANT NUMBER := FND_LOG.LEVEL_UNEXPECTED;
73
74 C_LEVEL_LOG_DISABLED CONSTANT NUMBER := 99;
75 C_DEFAULT_MODULE CONSTANT VARCHAR2(240) := 'xla.plsql.xla_cmp_common_pkg';
76
77 g_log_level NUMBER;
78 g_log_enabled BOOLEAN;
79
80 --1-STATEMENT, 2-PROCEDURE, 3-EVENT, 4-EXCEPTION, 5-ERROR, 6-UNEXPECTED
81
82 PROCEDURE trace
83 ( p_module IN VARCHAR2 DEFAULT C_DEFAULT_MODULE
84 ,p_msg IN VARCHAR2
85 ,p_level IN NUMBER
86 ) IS
87
88 BEGIN
89 IF (p_msg IS NULL AND p_level >= g_log_level) THEN
90 fnd_log.message(p_level, p_module);
91 ELSIF p_level >= g_log_level THEN
92 fnd_log.string(p_level, p_module, p_msg);
93 END IF;
94
95 EXCEPTION
96 WHEN xla_exceptions_pkg.application_exception THEN
97 RAISE;
98 WHEN OTHERS THEN
99 xla_exceptions_pkg.raise_message
100 (p_location => 'xla_cmp_common_pkg.trace');
101 END trace;
102
103
104 FUNCTION get_application_info
105 ( p_application_id IN NUMBER
106 ,p_application_info OUT NOCOPY lt_application_info
107 )
108 RETURN BOOLEAN
109 IS
110 l_application_name VARCHAR2(10);
111 l_application_short_name VARCHAR2(50);
112 l_product_short_name VARCHAR2(10);
113 l_log_module VARCHAR2 (2000);
114
115 BEGIN
116 IF g_log_enabled THEN
117 l_log_module := C_DEFAULT_MODULE||'.get_application_info';
118 END IF;
119
120 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
121 trace
122 (p_msg => 'BEGIN ' || l_log_module
123 ,p_level => C_LEVEL_PROCEDURE);
124 END IF;
125
126 --Select application info from FND and AD tables
127 SELECT fap.application_id
128 ,fav.application_name
129 ,fap.application_short_name
130 ,fou.oracle_username
131 ,UPPER(adp.product_abbreviation)
132 ,fou_apps.oracle_username
133 INTO p_application_info.application_id
134 ,p_application_info.application_name
135 ,p_application_info.application_short_name
136 ,p_application_info.oracle_username
137 ,p_application_info.product_abbreviation
138 ,p_application_info.apps_account
139 FROM fnd_application fap
140 ,fnd_application_vl fav
141 ,fnd_product_installations fpi
142 ,fnd_oracle_userid fou
143 ,ad_pm_product_info adp
144 ,fnd_oracle_userid fou_apps
145 WHERE fap.application_id = p_application_id
146 AND fav.application_id = fap.application_id
147 AND fpi.application_id = fap.application_id
148 AND fou.oracle_id = fpi.oracle_id
149 AND fpi.install_group_num IN (0, 1) --MSOB no more supported
150 AND UPPER(adp.product_abbreviation)
151 = UPPER(SUBSTR( fap.basepath
152 ,1
153 ,INSTR(fap.basepath,'_TOP') - 1
154 )
155 )
156 AND fou_apps.install_group_num = 1 -- fpi.install_group_num (5330846)
157 AND fou_apps.read_only_flag = 'U'
158 ;
159
160 --Application ID cannot be longer that 5 chars
161 IF LENGTH(TO_CHAR(p_application_info.application_id)) > 5
162 THEN
163 IF (C_LEVEL_EXCEPTION >= g_log_level)
164 THEN
165 trace
166 (p_msg => 'Application_id is too long, aborting'
167 ,p_level => C_LEVEL_PROCEDURE);
168 END IF;
169 RAISE le_fatal_error;
170 END IF;
171
172 --Application ID cannot be negative
173 IF SIGN(p_application_info.application_id) <= 0
174 THEN
175 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
176 trace
177 (p_msg => 'Application_id is negative, aborting'
181 END IF;
178 ,p_level => C_LEVEL_PROCEDURE);
179 END IF;
180 RAISE le_fatal_error;
182
183 --Build the hash id
184 p_application_info.application_hash_id := LPAD
185 ( TO_CHAR(p_application_info.application_id)
186 ,5
187 ,'0'
188 );
189 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
190 trace
191 (p_msg => 'Application hash id: '
192 || p_application_info.application_hash_id
193 ,p_level => C_LEVEL_STATEMENT);
194 END IF;
195
196 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
197 trace
198 (p_msg => 'END ' || l_log_module
199 ,p_level => C_LEVEL_PROCEDURE);
200 END IF;
201
202 RETURN TRUE;
203
204 EXCEPTION
205 WHEN le_fatal_error
206 THEN
207 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
208 trace
209 (p_msg => 'END with fatal error' || l_log_module
210 ,p_level => C_LEVEL_PROCEDURE);
211 END IF;
212 RETURN FALSE;
213
214 WHEN xla_exceptions_pkg.application_exception THEN
215 RAISE;
216 WHEN OTHERS THEN
217 xla_exceptions_pkg.raise_message
218 (p_location => 'xla_cmp_common_pkg.get_application_info');
219
220 END get_application_info;
221
222
223 FUNCTION get_user_name
224 ( p_user_id IN NUMBER
225 ,p_user_name OUT NOCOPY VARCHAR2
226 )
227 RETURN BOOLEAN
228 IS
229 l_log_module VARCHAR2 (2000);
230 BEGIN
231 IF g_log_enabled THEN
232 l_log_module := C_DEFAULT_MODULE||'.get_user_name';
233 END IF;
234
235 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
236 trace
237 (p_msg => 'BEGIN ' || C_DEFAULT_MODULE||'.get_user_name'
238 ,p_level => C_LEVEL_PROCEDURE);
239 END IF;
240
241 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
242 trace
243 (p_msg => 'Looking for user id: ' || p_user_id
244 ,p_level => C_LEVEL_STATEMENT);
245 END IF;
246
247 BEGIN
248 SELECT user_name
249 INTO p_user_name
250 FROM fnd_user
251 WHERE user_id = p_user_id;
252 EXCEPTION
253 WHEN NO_DATA_FOUND
254 THEN
255 p_user_name := 'Unknown user';
256 END;
257
258 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
259 trace
260 (p_msg => 'User name retrieved: ' || p_user_name
261 ,p_level => C_LEVEL_STATEMENT);
262 END IF;
263
264 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
265 trace
266 (p_msg => 'END ' || C_DEFAULT_MODULE||'.get_user_name'
267 ,p_level => C_LEVEL_PROCEDURE);
268 END IF;
269
270 RETURN TRUE;
271
272 EXCEPTION
273 WHEN xla_exceptions_pkg.application_exception THEN
274 RAISE;
275 WHEN OTHERS THEN
276 xla_exceptions_pkg.raise_message
277 (p_location => 'xla_cmp_common_pkg.get_user_name');
278
279 END get_user_name;
280
281
282 --+==========================================================================+
283 --| PRIVATE procedures and functions |
284 --| CreateString |
285 --| transforms long lines (length > 255) into a list of lines not |
286 --| exceeding 255 characters |
287 --| |
288 --| |
289 --+==========================================================================+
290 PROCEDURE CreateString( p_package_text IN VARCHAR2
291 ,p_array_string OUT NOCOPY DBMS_SQL.VARCHAR2S)
292 IS
293 --
294 l_Text VARCHAR2(32000);
295 l_SubText VARCHAR2(256);
296 --
297 l_MaxLine NUMBER := G_MAX_PACKAGE_LINE_LENGTH;
298 --
299 l_NewLine BOOLEAN;
300 l_Literal BOOLEAN;
301 l_Space BOOLEAN;
302 --
303 l_pos NUMBER ;
304 --
305 l_Idx BINARY_INTEGER;
306 l_array_string DBMS_SQL.VARCHAR2S;
307 --
308 l_log_module VARCHAR2 (2000);
309 BEGIN
310 --
311 xla_utility_pkg.trace('> xla_cmp_string_pkg.CreateString' , 80);
312 --
313 --
314 l_Text := p_package_text;
315 l_pos := 0;
316 l_NewLine := FALSE;
317 l_Literal := FALSE;
318 l_Space := FALSE;
319 l_Idx := 0;
320 --
321 WHILE ( LENGTH(l_Text) >= l_MaxLine ) LOOP
322 --
323 BEGIN
324 --
325 l_SubText := SUBSTR(l_Text,1,l_MaxLine);
326 l_pos := INSTR(l_SubText,g_chr_newline,1,1);
327 --
328 IF l_pos = 0 THEN
329 --
330 l_NewLine := FALSE;
331 l_pos := INSTR(l_SubText,g_chr_quote,1,1);
332 --
333 IF l_pos = 0 THEN
334 --
335 l_Literal := FALSE;
339 ELSE
336 l_pos := INSTR(l_SubText,g_chr_space,1,1);
337 l_Space := (l_pos = 0);
338 --
340 --
341 l_Literal := TRUE;
342 --
343 END IF;
344 --
345 ELSE
346 --
347 l_NewLine := TRUE;
348 --
349 END IF;
350 --
351 --
352 IF l_newline THEN
353 --
354 l_Idx := l_Idx + 1;
355 l_array_string(l_Idx) := SUBSTR(l_SubText,1,l_pos);
356 l_Text := SUBSTR(l_Text,l_pos + 1);
357 --
358 ELSIF l_Literal THEN
359 --
360 l_Idx := l_Idx + 1;
361 l_array_string(l_Idx) := SUBSTR(l_SubText,1,l_pos-1) || g_chr_newline;
362 l_Text := SUBSTR(l_Text,l_pos);
363 --
364 ELSIF l_Space THEN
365 --
366 l_Idx := l_Idx + 1;
367 l_array_string(l_Idx) := SUBSTR(l_SubText,1,l_pos-1) || g_chr_newline;
368 l_Text := SUBSTR(l_Text,l_pos + 1);
369 --
370 ELSE
371 --
372 l_Idx := l_Idx + 1;
373 l_array_string(l_Idx) := l_SubText;
374 l_Text := SUBSTR(l_Text,l_MaxLine + 1);
375 --
376 END IF;
377 --
378 END;
379 -- xla_utility_pkg.trace('Text('||l_Idx||') = '||l_array_string(l_Idx), 100);
380 END LOOP;
381 --
382 IF LENGTH(l_Text) > 0 THEN
383 --
384 l_Idx := l_Idx + 1;
385 l_array_string(l_Idx) := l_Text;
386 -- xla_utility_pkg.trace('Text('||l_Idx||') = '||l_array_string(l_Idx), 100);
387 --
388 END IF;
389 --
390 p_array_string := l_array_string;
391 --
392 xla_utility_pkg.trace('< xla_cmp_string_pkg.CreateString' , 80);
393 --
394 EXCEPTION
395 WHEN xla_exceptions_pkg.application_exception THEN
396 RAISE;
397 WHEN OTHERS THEN
398 xla_exceptions_pkg.raise_message
399 (p_location => 'xla_cmp_string_pkg.CreateString');
400 END CreateString;
401
402
403
404 PROCEDURE clob_to_varchar2s
405 (
406 p_clob IN CLOB
407 ,p_varchar2s OUT NOCOPY DBMS_SQL.VARCHAR2S
408 )
409 IS
410 l_current_table_index PLS_INTEGER;
411 l_current_pos_in_clob PLS_INTEGER;
412 l_next_newline_pos PLS_INTEGER;
413 l_clob_length PLS_INTEGER;
414 l_subarray DBMS_SQL.VARCHAR2S;
415 l_log_module VARCHAR2 (2000);
416
417 BEGIN
418 IF g_log_enabled THEN
419 l_log_module := C_DEFAULT_MODULE||'.clob_to_varchar2s';
420 END IF;
421
422 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
423 trace
424 (p_msg => 'BEGIN ' || l_log_module
425 ,p_level => C_LEVEL_PROCEDURE);
426 END IF;
427
428 l_clob_length := LENGTH(p_clob);
429 l_current_table_index := -1;
430 l_current_pos_in_clob := 1;
431
432 WHILE l_current_pos_in_clob < l_clob_length
433 LOOP
434 l_current_table_index := l_current_table_index + 1;
435 l_next_newline_pos := INSTR
436 ( p_clob --clob to search
437 ,g_chr_newline --character to look for
438 ,l_current_pos_in_clob --starting position
439 ,1 --occurrence
440 );
441
442 IF l_next_newline_pos = 0
443 THEN
444 --no new line found, take all the string to the end
445 --if the length of the substring exceeds the maximum
446 --break it into substrings
447 IF (l_clob_length - l_current_pos_in_clob + 1 )
448 <= G_MAX_PACKAGE_LINE_LENGTH
449 THEN
450 --the chunk length is within the maximum
451 p_varchar2s(l_current_table_index) := SUBSTR
452 ( p_clob
453 ,l_current_pos_in_clob
454 );
455 ELSE
456 /*xla_cmp_string_pkg.*/CreateString
457 (
458 p_package_text => SUBSTR
459 ( p_clob
460 ,l_current_pos_in_clob
461 )
462 ,p_array_string => l_subarray
463 );
464 FOR i IN l_subarray.FIRST..l_subarray.LAST
465 LOOP
466 IF i > l_subarray.FIRST
467 THEN
468 l_current_table_index := l_current_table_index + 1;
469 END IF;
470 p_varchar2s(l_current_table_index) := l_subarray(i);
471 END LOOP;
472 END IF;
473
474 l_current_pos_in_clob := l_clob_length;
475
476 ELSIF l_next_newline_pos IS NULL
477 THEN
478 --probably offset > LOBMAXSIZE
479 NULL;
480 --raise exception
481 ELSE
482 IF (l_next_newline_pos - l_current_pos_in_clob + 1 )
483 <= G_MAX_PACKAGE_LINE_LENGTH
484 THEN
485 --take the portion
486 p_varchar2s(l_current_table_index) := SUBSTR
487 ( p_clob
491 + 1
488 ,l_current_pos_in_clob
489 ,l_next_newline_pos
490 - l_current_pos_in_clob
492 );
493 ELSE
494 /*xla_cmp_string_pkg.*/CreateString
495 (
496 p_package_text => SUBSTR
497 ( p_clob
498 ,l_current_pos_in_clob
499 ,l_next_newline_pos
500 - l_current_pos_in_clob
501 + 1
502 )
503 ,p_array_string => l_subarray
504 );
505 FOR i IN l_subarray.FIRST..l_subarray.LAST
506 LOOP
507 IF i > l_subarray.FIRST
508 THEN
509 l_current_table_index := l_current_table_index + 1;
510 END IF;
511 p_varchar2s(l_current_table_index) := l_subarray(i);
512 END LOOP;
513 END IF;
514
515 l_current_pos_in_clob := l_next_newline_pos + 1;
516
517 END IF;
518 END LOOP;
519
520 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
521 trace
522 (p_msg => 'END ' || l_log_module
523 ,p_level => C_LEVEL_PROCEDURE);
524 END IF;
525
526 EXCEPTION
527 WHEN xla_exceptions_pkg.application_exception THEN
528 RAISE;
529 WHEN OTHERS THEN
530 xla_exceptions_pkg.raise_message
531 (p_location => 'xla_cmp_common_pkg.clob_to_varchar2s');
532 END clob_to_varchar2s;
533
534
535
536 PROCEDURE varchar2s_to_clob
537 (
538 p_varchar2s IN DBMS_SQL.VARCHAR2S
539 ,x_clob OUT NOCOPY CLOB
540 )
541 IS
542 l_log_module VARCHAR2 (2000);
543 BEGIN
544 IF g_log_enabled THEN
545 l_log_module := C_DEFAULT_MODULE||'.varchar2s_to_clob';
546 END IF;
547
548 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
549 trace
550 (p_msg => 'BEGIN ' || l_log_module
551 ,p_level => C_LEVEL_PROCEDURE);
552 END IF;
553
554 x_clob := NULL;
555
556 IF p_varchar2s.FIRST IS NULL
557 THEN
558 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
559 trace
560 (p_msg => 'p_varchar2s is empty'
561 ,p_level => C_LEVEL_STATEMENT);
562 END IF;
563 ELSE
564 FOR i IN p_varchar2s.FIRST..p_varchar2s.LAST
565 LOOP
566 x_clob := x_clob || p_varchar2s(i);
567 END LOOP;
568 END IF;
569
570 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
571 trace
572 (p_msg => 'END ' || l_log_module
573 ,p_level => C_LEVEL_PROCEDURE);
574 END IF;
575
576 EXCEPTION
577 WHEN xla_exceptions_pkg.application_exception THEN
578 RAISE;
579 WHEN OTHERS THEN
580 xla_exceptions_pkg.raise_message
581 (p_location => 'xla_cmp_common_pkg.varchar2s_to_clob');
582 END varchar2s_to_clob;
583
584
585
586 PROCEDURE dump_text
587 (
588 p_text IN VARCHAR2
589 )
590 IS
591 l_cur_position INTEGER;
592 l_next_cr_position INTEGER;
593 l_text_length INTEGER;
594 l_log_module VARCHAR2 (2000);
595
596 BEGIN
597 IF g_log_enabled THEN
598 l_log_module := C_DEFAULT_MODULE||'.dump_text';
599 END IF;
600 /*
601 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
602 trace
603 (p_msg => 'BEGIN ' || l_log_module
604 ,p_level => C_LEVEL_PROCEDURE);
605 END IF;
606 */
607 --Dump the SQL command
608 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
609 l_cur_position := 1;
610 l_next_cr_position := 0;
611 l_text_length := LENGTH(p_text);
612
613 WHILE l_next_cr_position < l_text_length
614 LOOP
615 l_next_cr_position := INSTR( p_text
616 ,g_chr_newline
617 ,l_cur_position
618 );
619
620 IF l_next_cr_position = 0
621 THEN
622 l_next_cr_position := l_text_length;
623 END IF;
624
625 trace
626 (p_msg => SUBSTR( p_text
627 ,l_cur_position
628 ,l_next_cr_position
629 - l_cur_position
630 + 1
631 )
632 ,p_level => C_LEVEL_STATEMENT);
633
634 IF l_cur_position < l_text_length
635 THEN
636 l_cur_position := l_next_cr_position + 1;
637 END IF;
638 END LOOP;
639 END IF;
640 /*
641 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
642 trace
643 (p_msg => 'END ' || l_log_module
644 ,p_level => C_LEVEL_PROCEDURE);
648 WHEN xla_exceptions_pkg.application_exception THEN
645 END IF;
646 */
647 EXCEPTION
649 RAISE;
650 WHEN OTHERS THEN
651 xla_exceptions_pkg.raise_message
652 (p_location => 'xla_cmp_common_pkg.dump_text');
653 END dump_text;
654
655 PROCEDURE dump_text
656 (
657 p_text IN DBMS_SQL.VARCHAR2S
658 )
659 IS
660 l_log_module VARCHAR2 (2000);
661
662 BEGIN
663 IF g_log_enabled THEN
664 l_log_module := C_DEFAULT_MODULE||'.dump_text';
665 END IF;
666
667 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
668 trace
669 (p_msg => 'BEGIN ' || l_log_module
670 ,p_level => C_LEVEL_PROCEDURE);
671 END IF;
672
673 IF p_text.FIRST IS NULL
674 THEN
675 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
676 trace
677 (p_msg => 'p_text is empty'
678 ,p_level => C_LEVEL_STATEMENT);
679 END IF;
680 ELSE
681 FOR i IN p_text.FIRST..p_text.LAST
682 LOOP
683 dump_text(p_text => p_text(i));
684 END LOOP;
685 END IF;
686
687 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
688 trace
689 (p_msg => 'END ' || l_log_module
690 ,p_level => C_LEVEL_PROCEDURE);
691 END IF;
692
693 EXCEPTION
694 WHEN xla_exceptions_pkg.application_exception THEN
695 RAISE;
696 WHEN OTHERS THEN
697 xla_exceptions_pkg.raise_message
698 (p_location => 'xla_cmp_common_pkg.dump_text');
699 END dump_text;
700
701 PROCEDURE dump_text
702 (
703 p_text IN CLOB
704 )
705 IS
706 l_cur_position INTEGER;
707 l_next_cr_position INTEGER;
708 l_text_length INTEGER;
709
710 l_log_module VARCHAR2 (2000);
711
712 BEGIN
713 IF g_log_enabled THEN
714 l_log_module := C_DEFAULT_MODULE||'.dump_text';
715 END IF;
716
717 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
718 trace
719 (p_msg => 'BEGIN ' || l_log_module
720 ,p_level => C_LEVEL_PROCEDURE);
721 END IF;
722
723 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
724 l_cur_position := 1;
725 l_next_cr_position := 0;
726 l_text_length := LENGTH(p_text);
727
728 WHILE l_next_cr_position < l_text_length
729 LOOP
730 l_next_cr_position := INSTR( p_text
731 ,g_chr_newline
732 ,l_cur_position
733 );
734
735 IF l_next_cr_position = 0
736 THEN
737 l_next_cr_position := l_text_length;
738 END IF;
739
740 trace
741 (p_msg => SUBSTR( p_text
742 ,l_cur_position
743 ,l_next_cr_position
744 - l_cur_position
745 + 1
746 )
747 ,p_level => C_LEVEL_STATEMENT);
748
749 IF l_cur_position < l_text_length
750 THEN
751 l_cur_position := l_next_cr_position + 1;
752 END IF;
753 END LOOP;
754 END IF;
755
756 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
757 trace
758 (p_msg => 'END ' || l_log_module
759 ,p_level => C_LEVEL_PROCEDURE);
760 END IF;
761
762 EXCEPTION
763 WHEN xla_exceptions_pkg.application_exception THEN
764 RAISE;
765 WHEN OTHERS THEN
766 xla_exceptions_pkg.raise_message
767 (p_location => 'xla_cmp_common_pkg.dump_text');
768 END dump_text;
769
770
771 FUNCTION bool_to_char(p_boolean IN BOOLEAN)
772 RETURN VARCHAR2
773 IS
774 l_log_module VARCHAR2 (2000);
775 l_return_value VARCHAR2 (10);
776 BEGIN
777 IF g_log_enabled THEN
778 l_log_module := C_DEFAULT_MODULE||'.bool_to_char';
779 END IF;
780
781 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
782 trace
783 (p_msg => 'BEGIN+END' || l_log_module
784 ,p_level => C_LEVEL_PROCEDURE);
785 END IF;
786
787 l_return_value := CASE p_boolean
788 WHEN TRUE THEN 'TRUE'
789 WHEN FALSE THEN 'FALSE'
790 ELSE 'NULL'
791 END;
792
793 RETURN l_return_value;
794 EXCEPTION
795 WHEN xla_exceptions_pkg.application_exception THEN
796 RAISE;
797 WHEN OTHERS THEN
798 xla_exceptions_pkg.raise_message
799 (p_location => 'xla_cmp_common_pkg.bool_to_char');
800 END bool_to_char;
801
802
803 FUNCTION replace_token
804 (
805 p_original_text IN CLOB
806 ,p_token IN VARCHAR2
807 ,p_replacement_text IN CLOB
808 )
809 RETURN CLOB
810 IS
811 l_found_position INTEGER;
812
813 l_return_value CLOB;
814
815 l_log_module VARCHAR2 (2000);
816
817 BEGIN
818 IF g_log_enabled THEN
819 l_log_module := C_DEFAULT_MODULE||'.dump_text';
820 END IF;
821
822 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
823 trace
824 (p_msg => 'BEGIN ' || l_log_module
825 ,p_level => C_LEVEL_PROCEDURE);
826 END IF;
827
828 --Copy the original clob into a local variable
829 l_return_value := p_original_text;
830
831 --Start a loop since the token might appear multiple times
832 LOOP
833 --Find the first occurrence of the token
834 l_found_position := INSTR(l_return_value, p_token);
835
836 --If not found exit
837 IF l_found_position = 0
838 OR l_found_position IS NULL
839 THEN
840 EXIT;
841 END IF;
842
843 --Extract the portions around the token and embed the replacement
844 l_return_value := SUBSTR( l_return_value
845 ,1
846 ,l_found_position - 1
847 )
848 || p_replacement_text
849 || SUBSTR( l_return_value
850 ,l_found_position + LENGTH(p_token)
851 );
852 END LOOP;
853
854 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
855 trace
856 (p_msg => 'END ' || l_log_module
857 ,p_level => C_LEVEL_PROCEDURE);
858 END IF;
859
860 RETURN l_return_value;
861 EXCEPTION
862 WHEN xla_exceptions_pkg.application_exception THEN
863 RAISE;
864 WHEN OTHERS THEN
865 xla_exceptions_pkg.raise_message
866 (p_location => 'xla_cmp_common_pkg.replace_token');
867 END replace_token;
868
869
870 --Trace initialization
871 BEGIN
872 g_log_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
873 g_log_enabled := fnd_log.test
874 (log_level => g_log_level
875 ,module => C_DEFAULT_MODULE);
876
877 IF NOT g_log_enabled THEN
878 g_log_level := C_LEVEL_LOG_DISABLED;
879 END IF;
880
881 END xla_cmp_common_pkg;