DBA Data[Home] [Help]

PACKAGE BODY: APPS.XLA_UTILITY_PKG

Source


1 PACKAGE BODY xla_utility_pkg AS
2 /* $Header: xlacmutl.pkb 120.11 2005/10/22 00:06:21 awan ship $ */
3 /*======================================================================+
4 |             Copyright (c) 1995-2002 Oracle Corporation                |
5 |                       Redwood Shores, CA, USA                         |
6 |                         All rights reserved.                          |
7 +=======================================================================+
8 | PACKAGE NAME                                                          |
9 |    xla_utility_pkg                                                    |
10 |                                                                       |
11 | PACKAGE NAME                                                          |
12 |    xla_utility_pkg                                                    |
13 |                                                                       |
14 | DESCRIPTION                                                           |
15 |    XLA Utility Package                                                |
16 |                                                                       |
17 |    This package provides wrapper for debugging/benchmark/testing      |
18 |    facilities.                                                        |
19 |                                                                       |
20 |    A] Trace/Debugging facilities.                                     |
21 |                                                                       |
22 |       The output debug messages are either:                           |
23 |          - printed on the standard OUTPUT,                            |
24 |          - sent to another SRS process waiting for a pipe,            |
25 |          - written to the current logfile through fnd_file            |
26 |          - written in an HTML page                                    |
27 |          - written in a flat file                                     |
28 |                                                                       |
29 |       Usage from SRS|Forms4.5+:                                       |
30 |          Setting up profile options:                                  |
31 |             xla_debug_trace_mode         (Yes/No)                     |
32 |             xla_debug_trace_level        (1..100)                     |
33 |             xla_debug_timeout in seconds (1..n)                       |
34 |                                                                       |
35 |       Usage from SQL*Plus:                                            |
36 |          BEGIN                                                        |
37 |          xla_utility_pkg.activate('OUTPUT|FILE',location);            |
38 |          <PL/SQL source>(...);                                        |
39 |          xla_utility_pkg.deactivate('OUTPUT|FILE',location);          |
40 |          END;                                                         |
41 |                                                                       |
42 |       PL/SQL coding standard:                                         |
43 |          BEGIN                                                        |
44 |          xla_utility_pkg.activate(mode,location)                      |
45 |          .../...                                                      |
46 |          xla_utility_pkg.trace('String',trace_level);                 |
47 |          xla_utility_pkg.trace('String',trace_level);                 |
48 |          .../...                                                      |
49 |          xla_utility_pkg.deactivate(location);                        |
50 |          END;                                                         |
51 |                                                                       |
52 |                                                                       |
53 |    B] SRS Output and logfile facilities                               |
54 |                                                                       |
55 |       Example of calls:                                               |
56 |          BEGIN                                                        |
57 |          .../...                                                      |
58 |          xla_utility_pkg.print_outputfile(msg);                       |
59 |          xla_utility_pkg.print_logfile(msg);                          |
60 |          .../...                                                      |
61 |          END;                                                         |
62 |                                                                       |
63 |                                                                       |
64 |    C] Statistics                                                      |
65 |                                                                       |
66 |       Example of calls:                                               |
67 |          BEGIN                                                        |
68 |          xla_utility_pkg.activate_stat;                               |
69 |          <PL/SQL source>(...);                                        |
70 |          xla_utility_pkg.deactivate_stat;                             |
71 |          END;                                                         |
72 |                                                                       |
73 |                                                                       |
74 |    D] SQL Trace facilities                                            |
75 |                                                                       |
76 |       Example of calls:                                               |
77 |          BEGIN                                                        |
78 |          .../...                                                      |
79 |          xla_utility_pkg.set_sqltrace_on;                             |
80 |          .../...                                                      |
81 |          xla_utility_pkg.set_sqltrace_off;                            |
82 |          .../...                                                      |
83 |          END;                                                         |
84 |                                                                       |
85 | DEPENDENCIES                                                          |
86 |    dbms_pipe                                                          |
87 |    dbms_utility                                                       |
88 |    dbms_output                                                        |
89 |    dbms_session                                                       |
90 |    fnd_file                                                           |
91 |    fnd_log                                                            |
92 |    fnd_request                                                        |
93 |    fnd_global                                                         |
94 |                                                                       |
95 | HISTORY                                                               |
96 |    07-Dec-95 P. Labrevois    Created                                  |
97 |    08-Feb-01                 Created for XLA                          |
98 |    28-Mar-01                 Major review                             |
99 |    17-Apr-01                 Review stat handling                     |
100 |    08-May-01                 Added get_session_info                   |
101 |    20-Sep-01                 Integrated with dbms_trace               |
102 |    11-Apr-03 Shishir Joshi   Modified call to the raise_message.      |
103 |                              Added parameter name to the call.        |
104 |    20-Oct-05 A.Wan 4693865   ATG Profile Options                      |
105 |                              profiles obsoleted:                      |
106 |                                   XLA_DEBUG_DBMS_TRACE                |
107 |                                   XLA_DEBUG_DBMS_TRACE_LEVEL          |
108 |                                   XLA_DEBUG_DBMS_TRACE_MODE           |
109 |                                   XLA_DEBUG_KEEP_GOING                |
110 |                                   XLA_DEBUG_SYSSTAT                   |
111 |                              code removed:                            |
112 |                                   KEEP_GOING func and related code    |
113 |                                   print_sysstat_data function         |
114 |                                                                       |
115 |                                                                       |
116 +======================================================================*/
117 
118 --
119 -- Constant default location
120 --
121 c_unknown_location             CONSTANT VARCHAR2(70)  := '_ UNKNOWN ORIGIN _';
122 
123 --
124 -- Mode available
125 --
126 c_mode_tracer                  CONSTANT VARCHAR2(50)  := 'TRACER';
127 c_mode_stracer                 CONSTANT VARCHAR2(50)  := 'STRACER';
128 c_mode_jtracer                 CONSTANT VARCHAR2(50)  := 'JTRACER';
129 c_mode_logfile                 CONSTANT VARCHAR2(50)  := 'LOGFILE';
130 c_mode_aflog                   CONSTANT VARCHAR2(50)  := 'AFLOG';
131 c_mode_file                    CONSTANT VARCHAR2(50)  := 'FILE';
132 c_mode_output                  CONSTANT VARCHAR2(50)  := 'OUTPUT';
133 c_mode_htm                     CONSTANT VARCHAR2(50)  := 'HTM';
134 
135 --
136 -- Default options set through constants
137 --
138 c_dflt_trace_level             CONSTANT PLS_INTEGER   := 100;
139 c_dflt_profiler                CONSTANT VARCHAR2(1)   := 'N';
140 c_dflt_header                  CONSTANT VARCHAR2(1)   := 'Y';
141 c_dflt_footer                  CONSTANT VARCHAR2(1)   := 'Y';
142 c_dflt_trace_datetime          CONSTANT VARCHAR2(1)   := 'N';
143 c_dflt_sqltrace                CONSTANT VARCHAR2(1)   := 'N';
144 c_dflt_file_flush_option       CONSTANT VARCHAR2(1)   := 'N';
145 c_dflt_file_override_directory CONSTANT VARCHAR2(2000):= NULL;
146 c_dflt_file_override_filename  CONSTANT VARCHAR2(240) := NULL;
147 c_dflt_trace                   CONSTANT VARCHAR2(1)   := 'N';
148 c_dflt_srs_mode                CONSTANT VARCHAR2(30)  := c_mode_tracer;
149 c_dflt_of_mode                 CONSTANT VARCHAR2(30)  := c_mode_file;
150 c_dflt_timeout                 CONSTANT PLS_INTEGER   := 600;
151 c_dflt_srs_output_enable       CONSTANT VARCHAR2(1)   := 'Y';
152 
153 --
154 -- Constants for tracer mode
155 --
156 c_pipe_name_suffix             CONSTANT VARCHAR2(50)  := '_TRC';
157 c_pipe_buffer_size             CONSTANT PLS_INTEGER   := 65536;
158 c_cp_appli                     CONSTANT VARCHAR2(50)  := 'XLA';
159 c_cp_tracer                    CONSTANT VARCHAR2(50)  := 'XLAMTR';
160 c_cp_stracer                   CONSTANT VARCHAR2(50)  := 'XLAMTS';
161 c_cp_jtracer                   CONSTANT VARCHAR2(50)  := 'XLAMTJ';
162 c_max_msg_pipe                 CONSTANT PLS_INTEGER   := 1950;
163 c_max_msg_output               CONSTANT PLS_INTEGER   := 255;
164 
165 --
166 -- Constants for file mode
167 --
168 c_file_prefix                  CONSTANT VARCHAR2(10)  := 'xla_';
169 c_file_suffix                  CONSTANT VARCHAR2(10)  := '.trc';
170 
171 --
172 -- Constants for formatting
173 --
174 c_equal_position               PLS_INTEGER     := 40;
175 c_equal_symbol                 VARCHAR2(1);
176 
177 --
178 -- Default value options
179 --
180 g_dflt_trace_level             PLS_INTEGER;
181 g_dflt_profiler                VARCHAR2(1);
182 g_dflt_header                  VARCHAR2(1);
183 g_dflt_footer                  VARCHAR2(1);
184 g_dflt_trace_datetime          VARCHAR2(1);
185 g_dflt_sqltrace                VARCHAR2(1);
186 g_dflt_file_flush_option       VARCHAR2(1);
187 g_dflt_file_override_directory VARCHAR2(2000);
188 g_dflt_file_override_filename  VARCHAR2(240);
189 g_dflt_trace                   VARCHAR2(1);
190 g_dflt_srs_mode                VARCHAR2(30);
191 g_dflt_of_mode                 VARCHAR2(30);
192 g_dflt_timeout                 INTEGER;
193 g_dflt_srs_output_enable       VARCHAR2(1);
194 
195 --
196 -- Generic global variables
197 --
198 g_trace_datetime               VARCHAR2(1);
199 g_header                       VARCHAR2(1);
200 g_footer                       VARCHAR2(1);
201 g_sqltrace                     VARCHAR2(1);
202 g_file_flush_option            VARCHAR2(1);
203 g_file_override_directory      VARCHAR2(2000);
204 g_file_override_filename       VARCHAR2(240);
205 g_srs_mode                     VARCHAR2(30);
206 g_of_mode                      VARCHAR2(30);
207 g_timeout                      INTEGER;
208 g_srs_output_enable            VARCHAR2(1);
209 g_debug_mode                   VARCHAR2(20)          := NULL;   -- Debug mode requested
210 g_mode                         VARCHAR2(30);                    -- Actual debug mode
211 g_location                     VARCHAR2(255)         := NULL;
212 g_RequestId                    NUMBER                := NULL;   -- Last request that submitted trace
213 
214 --
215 -- Tracer mode specific global variables
216 --
217 g_pipe_name                    VARCHAR2(100);
218 g_pipename_increment           PLS_INTEGER           := 0;
219 g_trace_reqid                  NUMBER;                          -- Tracer request id
220 
221 --
222 -- File mode specific global variables
223 --
224 g_file_handler                 utl_file.file_type;
225 g_file_directory               VARCHAR2(2000);
226 g_file_name                    VARCHAR2(240);
227 
228 --
229 -- File mode specific global variables
230 --
231 g_format                       VARCHAR2(1);
232 
233 
234 g_stat_datetime_start          PLS_INTEGER;
235 g_stat_datetime_stop           PLS_INTEGER;
236 
237 
238 
239 /*======================================================================+
240 |                                                                       |
241 |                                                                       |
242 |                                                                       |
243 |                                                                       |
244 |                                                                       |
245 |                                                                       |
246 |                                                                       |
247 |                                                                       |
248 |                                                                       |
249 |                                                                       |
250 |                                                                       |
251 |                                                                       |
252 |                                                                       |
253 |                                                                       |
254 |                                                                       |
255 |                                                                       |
256 |                                                                       |
257 |                                                                       |
258 |                                                                       |
259 |                                                                       |
260 | Options Functions                                                     |
261 |                                                                       |
262 |                                                                       |
263 |                                                                       |
264 |                                                                       |
265 |                                                                       |
266 |                                                                       |
267 |                                                                       |
268 |                                                                       |
269 |                                                                       |
270 |                                                                       |
271 |                                                                       |
272 |                                                                       |
273 |                                                                       |
274 |                                                                       |
275 |                                                                       |
276 |                                                                       |
277 |                                                                       |
278 |                                                                       |
279 |                                                                       |
280 |                                                                       |
281 +======================================================================*/
282 
283 /*======================================================================+
284 |                                                                       |
285 | Private Procedure                                                     |
286 |                                                                       |
287 | set_default_options                                                   |
288 |                                                                       |
289 | Set the default option. This procedure is called when the package is  |
290 | instanciated.                                                         |
291 |                                                                       |
292 +======================================================================*/
293 PROCEDURE set_default_options
294 IS
295 BEGIN
296 g_dflt_trace_level             := c_dflt_trace_level;
297 g_dflt_profiler                := c_dflt_profiler;
298 g_dflt_header                  := c_dflt_header;
299 g_dflt_footer                  := c_dflt_footer;
300 g_dflt_trace_datetime          := c_dflt_trace_datetime;
301 g_dflt_sqltrace                := c_dflt_sqltrace;
302 g_dflt_file_flush_option       := c_dflt_file_flush_option;
303 g_dflt_file_override_directory := c_dflt_file_override_directory;
304 g_dflt_file_override_filename  := c_dflt_file_override_filename;
305 g_dflt_trace                   := c_dflt_trace;
306 g_dflt_srs_mode                := c_dflt_srs_mode;
307 g_dflt_of_mode                 := c_dflt_of_mode;
308 g_dflt_timeout                 := c_dflt_timeout;
309 g_dflt_srs_output_enable       := c_dflt_srs_output_enable;
310 END set_default_options;
311 
312 
313 /*======================================================================+
314 |                                                                       |
315 | Private Procedure                                                     |
316 |                                                                       |
317 | set_options                                                           |
318 |                                                                       |
319 | Keep the options set in global variables.                             |
320 |                                                                       |
321 +======================================================================*/
322 PROCEDURE set_options
323 IS
324 BEGIN
325 --
326 -- Profile options value take precedance over default values
327 --
328 g_trace_level      := NVL(xla_profiles_pkg.get_value('XLA_DEBUG_TRACE_LEVEL')      , g_dflt_trace_level);
329 g_profiler         := NVL(xla_profiles_pkg.get_value('XLA_DEBUG_PROFILER')         , g_dflt_profiler);
330 g_trace_datetime   := NVL(xla_profiles_pkg.get_value('XLA_DEBUG_TRACE_DATETIME')   , g_dflt_trace_datetime);
331 g_sqltrace         := NVL(xla_profiles_pkg.get_value('XLA_DEBUG_SQLTRACE')         , g_dflt_sqltrace);
332 g_file_flush_option:= NVL(xla_profiles_pkg.get_value('XLA_DEBUG_FILE_FLUSH_OPTION'), g_dflt_file_flush_option);
333 g_file_override_directory
334                    := NVL(xla_profiles_pkg.get_value('XLA_DEBUG_FILE_OVERRIDE_DIRECTORY')
335                                                                                    , g_dflt_file_override_directory);
336 g_file_override_filename
337                    := NVL(xla_profiles_pkg.get_value('XLA_DEBUG_FILE_OVERRIDE_FILENAME')
338                                                                                    , g_dflt_file_override_filename);
339 g_trace            := NVL(xla_profiles_pkg.get_value('XLA_DEBUG_TRACE')            , g_dflt_trace);
340 g_srs_mode         := NVL(xla_profiles_pkg.get_value('XLA_DEBUG_SRS_MODE')         , g_dflt_srs_mode);
341 g_of_mode          := NVL(xla_profiles_pkg.get_value('XLA_DEBUG_OF_MODE')          , g_dflt_of_mode);
342 g_timeout          := NVL(xla_profiles_pkg.get_value('XLA_DEBUG_TIMEOUT')          , g_dflt_timeout);
343 g_srs_output_enable:= NVL(xla_profiles_pkg.get_value('XLA_DEBUG_SRS_OUTPUT_ENABLE'), g_dflt_srs_output_enable);
344 
345 --
346 -- Evaluate the status of the statistics from both the profiler and the system statistics
347 --
348 IF g_profiler = 'Y' THEN
349    g_stat     := 'Y';
350 ELSE
351    g_stat     := 'N';
352 END IF;
353 
354 g_header   := g_dflt_header;
355 g_footer   := g_dflt_footer;
356 
357 END set_options;
358 
359 
360 /*======================================================================+
361 |                                                                       |
362 | Private Procedure                                                     |
363 |                                                                       |
364 | reset_options                                                         |
365 |                                                                       |
366 | Reset all global variables to the default value. Reset as well global |
367 | variables not derived from profile options                            |
368 |                                                                       |
369 +======================================================================*/
370 PROCEDURE reset_options
371 IS
372 BEGIN
373 set_options;
374 g_RequestId         := NULL;
375 g_pipe_name         := NULL;
376 g_location          := NULL;
377 END reset_options;
378 
379 
380 /*======================================================================+
381 |                                                                       |
382 |                                                                       |
383 |                                                                       |
384 |                                                                       |
385 |                                                                       |
386 |                                                                       |
387 |                                                                       |
388 |                                                                       |
389 |                                                                       |
390 |                                                                       |
391 |                                                                       |
392 |                                                                       |
393 |                                                                       |
394 |                                                                       |
395 |                                                                       |
396 |                                                                       |
397 |                                                                       |
398 |                                                                       |
399 |                                                                       |
400 |                                                                       |
401 | Private Print Functions                                               |
402 |                                                                       |
403 |                                                                       |
404 |                                                                       |
405 |                                                                       |
406 |                                                                       |
407 |                                                                       |
408 |                                                                       |
409 |                                                                       |
410 |                                                                       |
411 |                                                                       |
412 |                                                                       |
413 |                                                                       |
414 |                                                                       |
415 |                                                                       |
416 |                                                                       |
417 |                                                                       |
418 |                                                                       |
419 |                                                                       |
420 |                                                                       |
421 |                                                                       |
422 +======================================================================*/
423 
424 
425 /*======================================================================+
426 |                                                                       |
427 | Private Procedure                                                     |
428 |                                                                       |
429 | open-srs_files                                                        |
430 |                                                                       |
431 | Open the temporary log and output files used by the FND concurrent    |
432 | processing.                                                           |
433 |                                                                       |
434 +======================================================================*/
435 PROCEDURE open_srs_files
436 
437 IS
438 
439 BEGIN
440 --
441 -- Print in the SRS output/logfile only if both the current context is inside
442 -- a concurrent request and this output is enabled.
443 --
444 IF g_requestid          NOT IN (0,-1)
445 AND g_srs_output_enable      = 'Y' THEN
446    fnd_file.put_line(fnd_file.log   ,'');
447    fnd_file.put_line(fnd_file.output,'');
448 END IF;
449 
450 EXCEPTION
451 WHEN xla_exceptions_pkg.application_exception THEN
452    g_srs_output_enable := 'N';
453       RAISE;
454 WHEN OTHERS                                   THEN
455    g_srs_output_enable := 'N';
456       xla_exceptions_pkg.raise_message
457          (p_location => 'xla_utility_pkg.open_srs_files');
458 END open_srs_files;
459 
460 
461 /*======================================================================+
462 |                                                                       |
463 | Private Procedure                                                     |
464 |                                                                       |
465 | get_root_dir                                                          |
466 |                                                                       |
467 | Return the root directory                                             |
468 |                                                                       |
469 +======================================================================*/
470 FUNCTION  get_root_dir
471   (p_path                         IN  VARCHAR2)
472 RETURN VARCHAR2
473 
474 IS
475 
476 BEGIN
477 IF INSTR(p_path,',',1) = 0 THEN
478    IF INSTR(p_path,';',1) = 0 THEN
479       RETURN SUBSTR(p_path , 1 ,LENGTH(p_path));
480    ELSE
481       RETURN SUBSTR(p_path , 1 ,INSTR(p_path,';',1)-1);
482    END IF;
483 ELSE
484    RETURN SUBSTR(p_path , 1 ,INSTR(p_path,',',1)-1);
485 END IF;
486 
487 EXCEPTION
488 WHEN OTHERS  THEN
489    xla_exceptions_pkg.raise_message
490       (p_location => 'xla_utility_pkg.get_root_dir');
491 END get_root_dir;
492 
493 
494 /*======================================================================+
495 |                                                                       |
496 | Private Procedure                                                     |
497 |                                                                       |
498 | open_file                                                             |
499 |                                                                       |
500 | Get a directory to be written                                         |
501 |                                                                       |
502 +======================================================================*/
503 PROCEDURE open_file
504 
505 IS
506 
507 l_parameter_value                 VARCHAR2(255);
508 l_dir                             VARCHAR2(255);
509 l_override_directory              VARCHAR2(2000);
510 l_override_filename               VARCHAR2(2000);
511 
512 BEGIN
513 
514 SELECT pa.value
515 INTO   l_parameter_value
516 FROM   v$parameter       pa
517 WHERE  pa.name   = 'utl_file_dir'
518 ;
519 
520 
521 -- IF xla_utility_event_pkg.is_event_set('RAISE_UTL_FILE_OPEN_FAILURE') THEN
522 --    l_dir := '/dummy';
523 -- ELSE
524 
525 --
526 -- Get the directory from the override directory if set
527 --
528 g_file_directory
529    := NVL(g_file_override_directory,get_root_dir (l_parameter_value));
530 
531 --
532 -- Get the filename from the override filename if set
533 --
534 g_file_name
535    := NVL(g_file_override_filename
536               ,c_file_prefix
537            ||  xla_environment_pkg.g_process_id
538            ||  '_'
539            ||  xla_environment_pkg.g_session_id
540            ||  c_file_suffix);
541 
542 ---
543 --- The file mode must be opened in 'w' mode in 7.3, otherwise in 'a' mode
544 ---
545 BEGIN
546 g_file_handler := utl_file.fopen(g_file_directory, g_file_name          ,'a');
547 
548 EXCEPTION
549 WHEN utl_file.invalid_mode                   THEN
550    g_file_handler := utl_file.fopen(g_file_directory, g_file_name          ,'w');
551 END;
552 
553 EXCEPTION
554 WHEN xla_exceptions_pkg.application_exception THEN
555    g_trace := 'N';
556    RAISE;
557 WHEN utl_file.invalid_path                   THEN
558       xla_exceptions_pkg.raise_message
559      ('XLA'        , 'XLA_TRACE_FILE_PATH'
560      ,'FILENAME'   , g_file_name
561      ,'DIRECTORY'  , g_file_directory);
562 WHEN utl_file.invalid_mode                   THEN
563       xla_exceptions_pkg.raise_message
564      ('XLA'        , 'XLA_TRACE_FILE_MODE'
565      ,'FILENAME'   , g_file_name
566      ,'DIRECTORY'  , g_file_directory);
567 WHEN utl_file.invalid_filehandle             THEN
568       xla_exceptions_pkg.raise_message
569      ('XLA'        , 'XLA_TRACE_FILE_HANDLE'
570      ,'FILENAME'   , g_file_name
571      ,'DIRECTORY'  , g_file_directory);
572 WHEN utl_file.invalid_operation              THEN
573       xla_exceptions_pkg.raise_message
574      ('XLA'        , 'XLA_TRACE_FILE_OPE'
575      ,'FILENAME'   , g_file_name
576      ,'DIRECTORY'  , g_file_directory);
577 WHEN utl_file.write_error                     THEN
578       xla_exceptions_pkg.raise_message
579      ('XLA'        , 'XLA_TRACE_FILE_WRITE'
580      ,'FILENAME'   , g_file_name
581      ,'DIRECTORY'  , g_file_directory);
582 WHEN utl_file.internal_error                 THEN
583       xla_exceptions_pkg.raise_message
584      ('XLA'        , 'XLA_TRACE_FILE_ERROR'
585      ,'FILENAME'   , g_file_name
586      ,'DIRECTORY'  , g_file_directory);
587 WHEN OTHERS  THEN
588    xla_exceptions_pkg.raise_message
589       (p_location => 'xla_utility_pkg.open_file');
590 END open_file;
591 
592 
593 /*======================================================================+
594 |                                                                       |
595 | Private Procedure                                                     |
596 |                                                                       |
597 | close_file                                                            |
598 |                                                                       |
599 | Get a directory to be written                                         |
600 |                                                                       |
601 +======================================================================*/
602 PROCEDURE close_file
603 
604 IS
605 
606 BEGIN
607 utl_file.fclose(g_file_handler);
608 
609 EXCEPTION
610 WHEN xla_exceptions_pkg.application_exception THEN
611    g_trace := 'N';
612    RAISE;
613 WHEN utl_file.invalid_path                   THEN
614       xla_exceptions_pkg.raise_message
615      ('XLA'        , 'XLA_TRACE_FILE_PATH'
616      ,'FILENAME'   , g_file_name
617      ,'DIRECTORY'  , g_file_directory);
618 WHEN utl_file.invalid_mode                   THEN
619       xla_exceptions_pkg.raise_message
620      ('XLA'        , 'XLA_TRACE_FILE_MODE'
621      ,'FILENAME'   , g_file_name
622      ,'DIRECTORY'  , g_file_directory);
623 WHEN utl_file.invalid_filehandle             THEN
624       xla_exceptions_pkg.raise_message
625      ('XLA'        , 'XLA_TRACE_FILE_HANDLE'
626      ,'FILENAME'   , g_file_name
627      ,'DIRECTORY'  , g_file_directory);
628 WHEN utl_file.invalid_operation              THEN
629       xla_exceptions_pkg.raise_message
630      ('XLA'        , 'XLA_TRACE_FILE_OPE'
631      ,'FILENAME'   , g_file_name
632      ,'DIRECTORY'  , g_file_directory);
633 WHEN utl_file.write_error                     THEN
634       xla_exceptions_pkg.raise_message
635      ('XLA'        , 'XLA_TRACE_FILE_WRITE'
636      ,'FILENAME'   , g_file_name
637      ,'DIRECTORY'  , g_file_directory);
638 WHEN utl_file.internal_error                 THEN
639       xla_exceptions_pkg.raise_message
640      ('XLA'        , 'XLA_TRACE_FILE_ERROR'
641      ,'FILENAME'   , g_file_name
642      ,'DIRECTORY'  , g_file_directory);
643 WHEN OTHERS  THEN
644    xla_exceptions_pkg.raise_message
645       (p_location => 'xla_utility_pkg.close_file');
646 END close_file;
647 
648 
649 /*======================================================================+
650 |                                                                       |
651 | Private Procedure                                                     |
652 |                                                                       |
653 | convert_msg                                                           |
654 |                                                                       |
655 | Convert the message to place the symbol = after 25 characters         |
656 |                                                                       |
657 +======================================================================*/
658 FUNCTION convert_msg
659   (p_msg                          IN  VARCHAR2)
660 RETURN VARCHAR2
661 
662 IS
663 
664 l_equal_position                  INTEGER    ;
665 l_pos                             INTEGER;
666 l_datetime                        VARCHAR2(30);
667 l_new_msg                         VARCHAR2(2000);
668 l_msg                         VARCHAR2(2000);
669 
670 BEGIN
671 
672 c_equal_symbol     := '=';
673 
674 IF g_format = 'N' THEN
675    RETURN p_msg;
676 END IF;
677 
678 IF g_trace_datetime = 'Y' THEN
679    l_equal_position := c_equal_position + 20;
680    l_datetime       := TO_CHAR(sysdate,'DD-MON HH24:MI:SS');
681 ELSE
682    l_equal_position := c_equal_position;
683 END IF;
684 
685 l_pos      := NVL(INSTR(p_msg,c_equal_symbol,1,1),0);
686 
687 IF l_pos = 0 THEN
688    l_new_msg := p_msg;
689 ELSE
690    IF    l_pos = l_equal_position   THEN
691       l_new_msg := p_msg;
692    ELSIF l_pos < l_equal_position   THEN
693       l_new_msg := RPAD(NVL(SUBSTR(RTRIM(REPLACE(p_msg,' ',' ')),1,l_pos-1),'@'),l_equal_position-1,' ')||'='||SUBSTR(p_msg,l_pos+1);
694    ELSE
695       --
696       -- Symbol is after the threshold.
697       -- PLAB: To review to handle nested new lines
698       --
699       l_new_msg := SUBSTR(p_msg,1,l_pos-1)
700          ||  xla_environment_pkg.g_chr_newline
701          ||  ' '||LPAD('=',l_equal_position-1,' ')
702          ||  SUBSTR(p_msg,l_pos+1);
703    END IF;
704 END IF;
705 
706 IF g_trace_datetime = 'Y' THEN
707    --
708    -- Add the time on the left side and left pad the new line character
709    -- with the space allocated to the timing
710    --
711    RETURN l_datetime || ' '||REPLACE(l_new_msg,xla_environment_pkg.g_chr_newline
712                                               ,xla_environment_pkg.g_chr_newline || RPAD(' ',16,' '));
713 ELSE
714    RETURN l_new_msg;
715 END IF;
716 END convert_msg;
717 
718 
719 /*======================================================================+
720 |                                                                       |
721 | Private Procedure                                                     |
722 |                                                                       |
723 | print_output                                                          |
724 |                                                                       |
725 | Print the messgae to the standard dbms_output                         |
726 |                                                                       |
727 | Parameters                                                            |
728 |             1  IN  p_msg                VARCHAR2 Debug message        |
729 |                                                                       |
730 +======================================================================*/
731 PROCEDURE print_output
732   (p_msg                          IN  VARCHAR2)
733 
734 IS
735 
736 l_length             NUMBER;
737 l_compt              NUMBER;
738 l_sub                VARCHAR2(4000);
739 l_pos                NUMBER;
740 l_l                  NUMBER;
741 
742 BEGIN
743 l_length := LENGTHB(p_msg);
744 l_compt  := 1;
745 WHILE (l_compt <= l_length) LOOP
746    BEGIN
747    l_pos := INSTR(p_msg,xla_environment_pkg.g_chr_newline,l_compt,1);
748    IF ((l_pos = 0) OR ((l_pos -l_compt) > c_max_msg_output)) THEN
749       l_l     := LEAST(c_max_msg_output,l_length-l_compt+1);
750       l_sub   := SUBSTR(p_msg,l_compt,l_l);
751       l_compt := l_compt+l_l;
752    ELSE
753       l_l     := l_pos - l_compt;
754       l_sub   := SUBSTR(p_msg,l_compt,l_l);
755       l_compt := l_compt+l_l+1;
756    END IF;
757    END;
758 END LOOP;
759 END print_output;
760 
761 
762 /*======================================================================+
763 |                                                                       |
764 | Private Procedure                                                     |
765 |                                                                       |
766 | print_html                                                            |
767 |                                                                       |
768 | Print the messgae to the standard dbms_output                         |
769 |                                                                       |
770 | Parameters                                                            |
771 |             1  IN  p_msg                VARCHAR2 Debug message        |
772 |                                                                       |
773 +======================================================================*/
774 PROCEDURE print_html
775   (p_msg                          IN  VARCHAR2)
776 
777 IS
778 
779 BEGIN
780 htp.p(p_msg);
781 END print_html;
782 
783 
784 /*======================================================================+
785 |                                                                       |
786 | Private Procedure                                                     |
787 |                                                                       |
788 | print_fndfile                                                         |
789 |                                                                       |
790 | Print the messgage to the fndfile                                     |
791 |                                                                       |
792 | Parameters                                                            |
793 |             1  IN  p_msg                VARCHAR2 Debug message        |
794 |                                                                       |
795 +======================================================================*/
796 PROCEDURE print_fndfile
797   (p_msg                          IN  VARCHAR2)
798 
799 IS
800 
801 BEGIN
802 fnd_file.put_line(fnd_file.log,p_msg);
803 
804 -- IF xla_utility_event_pkg.is_event_set('RAISE_FND_FILE_OPEN_FAILURE') THEN
805 --   RAISE utl_file.invalid_path;
806 -- END IF;
807 
808 EXCEPTION
809 WHEN xla_exceptions_pkg.application_exception THEN
810    g_srs_output_enable := 'N';
811       RAISE;
812 WHEN OTHERS  THEN
813    g_srs_output_enable := 'N';
814       xla_exceptions_pkg.raise_message
815          (p_location => 'xla_utility_pkg.print_fndfile');
816 END print_fndfile;
817 
818 
819 /*======================================================================+
820 |                                                                       |
821 | Private Procedure                                                     |
822 |                                                                       |
823 | print_aflog                                                           |
824 |                                                                       |
825 | Print the messgage to the af log                                      |
826 |                                                                       |
827 | Parameters                                                            |
828 |             1  IN  p_msg                VARCHAR2 Debug message        |
829 |                                                                       |
830 +======================================================================*/
831 PROCEDURE print_aflog
832   (p_msg                          IN  VARCHAR2)
833 
834 IS
835 
836 BEGIN
837 IF fnd_log.LEVEL_STATEMENT >= fnd_log.G_CURRENT_RUNTIME_LEVEL THEN
838 fnd_log.string
839   (fnd_log.LEVEL_STATEMENT ,'xla-plsql' ,p_msg);
840 END IF;
841 
842 EXCEPTION
843 WHEN xla_exceptions_pkg.application_exception THEN
844       RAISE;
845 WHEN OTHERS  THEN
846       xla_exceptions_pkg.raise_message
847          (p_location => 'xla_utility_pkg.print_aflog');
848 END print_aflog;
849 
850 
851 /*======================================================================+
852 |                                                                       |
853 | Private Procedure                                                     |
854 |                                                                       |
855 | print_fndfile                                                         |
856 |                                                                       |
857 | Print the messgage to the fndfile                                     |
858 |                                                                       |
859 | Parameters                                                            |
860 |             1  IN  p_msg                VARCHAR2 Debug message        |
861 |                                                                       |
862 +======================================================================*/
863 PROCEDURE print_file
864   (p_msg                          IN  VARCHAR2)
865 
866 IS
867 
868 BEGIN
869 utl_file.put_line(g_file_handler,p_msg);
870 
871 IF g_file_flush_option = 'Y' THEN
872    utl_file.fflush(g_file_handler);
873 END IF;
874 
875 EXCEPTION
876 WHEN xla_exceptions_pkg.application_exception THEN
877    g_trace := 'N';
878    RAISE;
879 WHEN utl_file.invalid_path                   THEN
880       xla_exceptions_pkg.raise_message
881      ('XLA'        , 'XLA_TRACE_FILE_PATH'
882      ,'FILENAME'   , g_file_name
883      ,'DIRECTORY'  , g_file_directory);
884 WHEN utl_file.invalid_mode                   THEN
885       xla_exceptions_pkg.raise_message
886      ('XLA'        , 'XLA_TRACE_FILE_MODE'
887      ,'FILENAME'   , g_file_name
888      ,'DIRECTORY'  , g_file_directory);
889 WHEN utl_file.invalid_filehandle             THEN
890       xla_exceptions_pkg.raise_message
891      ('XLA'        , 'XLA_TRACE_FILE_HANDLE'
892      ,'FILENAME'   , g_file_name
893      ,'DIRECTORY'  , g_file_directory);
894 WHEN utl_file.invalid_operation              THEN
895       xla_exceptions_pkg.raise_message
896      ('XLA'        , 'XLA_TRACE_FILE_OPE'
897      ,'FILENAME'   , g_file_name
898      ,'DIRECTORY'  , g_file_directory);
899 WHEN utl_file.write_error                     THEN
900       xla_exceptions_pkg.raise_message
901      ('XLA'        , 'XLA_TRACE_FILE_WRITE'
902      ,'FILENAME'   , g_file_name
903      ,'DIRECTORY'  , g_file_directory);
904 WHEN utl_file.internal_error                 THEN
905       xla_exceptions_pkg.raise_message
906      ('XLA'        , 'XLA_TRACE_FILE_ERROR'
907      ,'FILENAME'   , g_file_name
908      ,'DIRECTORY'  , g_file_directory);
909 WHEN OTHERS  THEN
910    g_trace := 'N';
911    xla_exceptions_pkg.raise_message
912       (p_location => 'xla_utility_pkg.print_file');
913 END print_file;
914 
915 
916 /*======================================================================+
917 |                                                                       |
918 | Private Procedure                                                     |
919 |                                                                       |
920 | send_pipe                                                             |
921 |                                                                       |
922 | Print the message to the pipe.                                        |
923 |                                                                       |
924 +======================================================================*/
925 PROCEDURE send_pipe
926   (p_msg                          IN  VARCHAR2)
927 
928 IS
929 
930 l_cr                 NUMBER;
931 BEGIN
932 dbms_pipe.pack_message(NVL(p_msg,' ') );
933 l_cr := dbms_pipe.send_message(g_pipe_name,g_timeout,c_pipe_buffer_size);
934 IF l_cr <> 0 THEN
935    IF    l_cr = 1 THEN
936       --
937       -- Switch the trace to OFF to avoid indefinite recursive loop
938       --
939       g_trace := 'N';
940       xla_exceptions_pkg.raise_message
941                 (p_appli_s_name => 'XLA'
942                , p_msg_name    => 'XLA_TRACE_PIPE_TIMEOUT');
943    ELSIF l_cr = 3 THEN
944       --
945       -- Switch the trace to OFF to avoid indefinite recursive loop
946       --
947       g_trace := 'N';
948       xla_exceptions_pkg.raise_message
949                 (p_appli_s_name => 'XLA'
950                 ,p_msg_name     =>  'XLA_TRACE_PIPE_ERROR');
951    ELSE
952       --
953       -- Switch the trace to OFF to avoid indefinite recursive loop
954       --
955       g_trace := 'N';
956       xla_exceptions_pkg.raise_message  ('XLA'          , 'XLA_TRACE_PIPE_ERROR2'
957                                         ,'ERROR'        , l_cr);
958    END IF;
959 END IF;
960 EXCEPTION
961 WHEN xla_exceptions_pkg.application_exception THEN
962       RAISE;
963 WHEN OTHERS  THEN
964       xla_exceptions_pkg.raise_message
965          (p_location => 'xla_utility_pkg.send_pipe');
966 END send_pipe;
967 
968 
969 /*======================================================================+
970 |                                                                       |
971 | Private Procedure                                                     |
972 |                                                                       |
973 | print_pipe                                                            |
974 |                                                                       |
975 | Print the message to the pipe                                         |
976 |                                                                       |
977 +======================================================================*/
978 PROCEDURE print_pipe
979   (p_msg                          IN  VARCHAR2)
980 
981 IS
982 
983 l_length             NUMBER;
984 l_compt              NUMBER;
985 l_sub                VARCHAR2(4000);
986 l_pos                NUMBER;
987 l_l                  NUMBER;
988 
989 BEGIN
990 l_length := LENGTHB(p_msg);
991 l_compt  := 1;
992 WHILE (l_compt <= l_length) LOOP
993    BEGIN
994    l_pos := INSTR(p_msg,xla_environment_pkg.g_chr_newline,l_compt,1);
995    IF ((l_pos = 0) OR ((l_pos -l_compt) > c_max_msg_pipe)) THEN
996       l_l     := LEAST(c_max_msg_pipe,l_length-l_compt+1);
997       l_sub   := SUBSTR(p_msg,l_compt,l_l);
998       l_compt := l_compt+l_l;
999    ELSE
1000       l_l     := l_pos - l_compt;
1001       l_sub   := SUBSTR(p_msg,l_compt,l_l);
1002       l_compt := l_compt+l_l+1;
1003    END IF;
1004    send_pipe(l_sub);
1005    END;
1006 END LOOP;
1007 END print_pipe;
1008 
1009 
1010 /*======================================================================+
1011 |                                                                       |
1012 | Private Function                                                      |
1013 |                                                                       |
1014 | set_unique_session_info                                               |
1015 |                                                                       |
1016 | Set the pipe name.                                                    |
1017 |                                                                       |
1018 +======================================================================*/
1019 PROCEDURE set_unique_session_info
1020 
1021 IS
1022 
1023 BEGIN
1024 g_pipename_increment  := g_pipename_increment + 1;
1025 g_pipe_name           := xla_environment_pkg.g_session_name
1026                       || '_'
1027                       || LTRIM(RTRIM(TO_CHAR(g_pipename_increment)))
1028                       || c_pipe_name_suffix;
1029 g_unique_location     := REPLACE(g_location ,'''','')
1030                       || '_'
1031                       || xla_environment_pkg.g_session_name
1032                       || '_'
1033                       || LTRIM(RTRIM(TO_CHAR(g_pipename_increment)));
1034 END set_unique_session_info;
1035 
1036 
1037 /*======================================================================+
1038 |                                                                       |
1039 | Private Procedure                                                     |
1040 |                                                                       |
1041 | stop_tracer                                                           |
1042 |                                                                       |
1043 | Stop the tracer by sending the STOP message. Any error is ignored.    |
1044 |                                                                       |
1045 +======================================================================*/
1046 PROCEDURE stop_tracer
1047 
1048 IS
1049 
1050 l_cr                 NUMBER;
1051 BEGIN
1052 dbms_pipe.pack_message('STOP');
1053 l_cr := dbms_pipe.send_message(g_pipe_name,g_timeout,c_pipe_buffer_size);
1054 
1055 EXCEPTION
1056 WHEN xla_exceptions_pkg.application_exception THEN
1057    g_trace := 'N';
1058    RAISE;
1059 WHEN OTHERS  THEN
1060    g_trace := 'N';
1061    xla_exceptions_pkg.raise_message
1062       (p_location => 'xla_utility_pkg.stop_tracer');
1063 END stop_tracer;
1064 
1065 
1066 /*======================================================================+
1067 |                                                                       |
1068 | Private Function                                                      |
1069 |                                                                       |
1070 | SubmitTracer                                                          |
1071 |                                                                       |
1072 | Call the tracer                                                       |
1073 |                                                                       |
1074 | Return                                                                |
1075 |             0  Success                                                |
1076 |             2  Failure                                                |
1077 |                                                                       |
1078 +======================================================================*/
1079 PROCEDURE SubmitTracer
1080 IS
1081 
1082 PRAGMA               autonomous_transaction;
1083 l_reqid              NUMBER;
1084 l_temp               VARCHAR2(255);
1085 
1086 BEGIN
1087 
1088 IF g_debug_mode = 'OF' THEN
1089    l_temp := g_location;
1090 ELSE
1091    IF g_RequestId NOT IN (0,-1) THEN
1092       l_temp := TO_CHAR(g_RequestId);
1093    ELSE
1094       l_temp := g_location;
1095    END IF;
1096 END IF;
1097 
1098 IF    g_mode = c_mode_stracer THEN
1099    l_reqid := fnd_request.submit_request (c_cp_appli
1100                                          ,c_cp_stracer
1101                                          ,description => 'Trace '||l_temp
1102                                          ,argument1   => g_pipe_name) ;
1103    IF l_reqid = 0 THEN
1104       l_reqid := fnd_request.submit_request (c_cp_appli
1105                                             ,c_cp_tracer
1106                                             ,description => 'Trace '||l_temp
1107                                             ,argument1   => g_pipe_name);
1108    END IF;
1109 ELSIF g_mode = c_mode_jtracer THEN
1110    l_reqid := fnd_request.submit_request (c_cp_appli
1111                                          ,c_cp_jtracer
1112                                          ,description => 'Trace '||l_temp
1113                                          ,argument1   => g_pipe_name) ;
1114    IF l_reqid = 0 THEN
1115       l_reqid := fnd_request.submit_request (c_cp_appli
1116                                             ,c_cp_tracer
1117                                             ,description => 'Trace '||l_temp
1118                                             ,argument1   => g_pipe_name);
1119    END IF;
1120 
1121 ELSE
1122    l_reqid := fnd_request.submit_request (c_cp_appli
1123                                          ,c_cp_tracer
1124                                          ,description => 'Trace '||l_temp
1125                                          ,argument1   => g_pipe_name);
1126 END IF;
1127 
1128 IF l_reqid = 0 THEN
1129    RAISE xla_exceptions_pkg.application_exception;
1130 END IF;
1131 
1132 g_trace_reqid := l_reqid;
1133 COMMIT;
1134 
1135 IF g_trace = 'Y' THEN
1136    dbms_pipe.purge(g_pipe_name);
1137    dbms_pipe.reset_buffer;
1138 END IF;
1139 END SubmitTracer;
1140 
1141 
1142 /*======================================================================+
1143 |                                                                       |
1144 | Private Procedure                                                     |
1145 |                                                                       |
1146 | print_header                                                          |
1147 |                                                                       |
1148 | Printer the standard header                                           |
1149 |                                                                       |
1150 +======================================================================*/
1151 PROCEDURE print_header
1152 
1153 IS
1154 
1155 BEGIN
1156 IF g_header = 'Y' THEN
1157    trace('Utilities activated'                                             ,-10);
1158    trace(RPAD('+',76,'-')||'+'                                             ,-10);
1159    trace('Revision                   = $Revision: 120.11 $'                 ,-10);
1160    trace('Datetime                   = ' || TO_CHAR(sysdate,'DD-MON-YYYY HH24:MI:SS')
1161                                                                         ,-10);
1162    trace('OS Module                  = ' || xla_environment_pkg.g_module   ,-10);
1163    trace('OS Process id              = ' || xla_environment_pkg.g_process_id, -10);
1164    trace('RDBMS Session id           = ' || xla_environment_pkg.g_session_id, -10);
1165    trace('SRS Program                = ' || xla_environment_pkg.g_program  ,-10);
1166    trace('Location                   = ' || g_location                     ,-10);
1167    trace('Timeout                    = ' || g_timeout                      ,-10);
1168    trace('Type                       = ' || g_debug_mode                   ,-10);
1169    trace('Mode                       = ' || g_mode                         ,-10);
1170    trace('File flush                 = ' || g_file_flush_option            ,-10);
1171    trace('SRS output enabled         = ' || g_srs_output_enable            ,-10);
1172    trace('Trace enabled              = ' || g_trace                        ,-10);
1173    trace('Trace Level                = ' || g_trace_level                  ,-10);
1174    trace('Profiler enabled           = ' || g_profiler                     ,-10);
1175    trace('Profiler location          = ' || g_unique_location              ,-10);
1176    trace(RPAD('+',76,'-')||'+'                                             ,-10);
1177 END IF;
1178 END;
1179 
1180 
1181 /*======================================================================+
1182 |                                                                       |
1183 | Private Procedure                                                     |
1184 |                                                                       |
1185 | print_footer                                                          |
1186 |                                                                       |
1187 | Printer the standard footer                                           |
1188 |                                                                       |
1189 +======================================================================*/
1190 PROCEDURE print_footer
1191 
1192 IS
1193 
1194 BEGIN
1195 IF g_footer = 'Y' THEN
1196    trace(RPAD('+',76,'-')||'+'                                             ,-10);
1197    trace('Utilities deactivated'                                           ,-10);
1198    trace('Datetime                   = ' || TO_CHAR(sysdate,'DD-MON-YYYY HH24:MI:SS')
1199                                                                         ,-10);
1200    trace('Trace Origin Location      = ' || g_location                     ,-10);
1201 END IF;
1202 END;
1203 
1204 
1205 /*======================================================================+
1206 |                                                                       |
1207 |                                                                       |
1208 |                                                                       |
1209 |                                                                       |
1210 |                                                                       |
1211 |                                                                       |
1212 |                                                                       |
1213 |                                                                       |
1214 |                                                                       |
1215 |                                                                       |
1216 |                                                                       |
1217 |                                                                       |
1218 |                                                                       |
1219 |                                                                       |
1220 |                                                                       |
1221 |                                                                       |
1222 |                                                                       |
1223 |                                                                       |
1224 |                                                                       |
1225 |                                                                       |
1226 | Activate/Deactivate                                                   |
1227 |                                                                       |
1228 |                                                                       |
1229 |                                                                       |
1230 |                                                                       |
1231 |                                                                       |
1232 |                                                                       |
1233 |                                                                       |
1234 |                                                                       |
1235 |                                                                       |
1236 |                                                                       |
1237 |                                                                       |
1238 |                                                                       |
1239 |                                                                       |
1240 |                                                                       |
1241 |                                                                       |
1242 |                                                                       |
1243 |                                                                       |
1244 |                                                                       |
1245 |                                                                       |
1246 |                                                                       |
1247 +======================================================================*/
1248 
1249 /*======================================================================+
1250 |                                                                       |
1251 | Public Procedure                                                      |
1252 |                                                                       |
1253 | Activate                                                              |
1254 |                                                                       |
1255 | Activate the XLA Debug mode.                                          |
1256 |                                                                       |
1257 +======================================================================*/
1258 PROCEDURE Activate
1259   (p_debug_mode                   IN  VARCHAR2
1260   ,p_Location                     IN  VARCHAR2)
1261 
1262 IS
1263 
1264 BEGIN
1265 IF NOT g_debug THEN
1266 
1267    --
1268    -- Debug if OFF, or (in a very few cases) switched back from ON to OFF
1269    --
1270 
1271    IF NVL(g_location,'UNKNOWN') = 'UNKNOWN' THEN
1272 
1273       --
1274       -- First debug initialization.
1275       -- Keep the location where the first init_trace has been requested.
1276       --
1277       g_Location           := p_Location;
1278 
1279       ---
1280       --- Determinate the options for the session
1281       ---
1282       set_unique_session_info;
1283       set_options;
1284 
1285       IF p_debug_mode  IN ('SRS_DBP','OR','OF') THEN
1286 
1287          --
1288          -- Caller is either SRS, Reports, Forms, conditionnally set
1289          --
1290 
1291          --
1292          -- Get the request id. This will be used to determinate if the program is running within a
1293          -- concurrent program or not.
1294          -- A direct call to fnd is used to avoid side effects when the debug is implicity launched
1295          --
1296          g_RequestId         := fnd_global.conc_request_id;
1297 
1298          IF g_trace      = 'Y'
1299          OR g_stat       = 'Y' THEN
1300 
1301             --
1302             -- Debug is ON
1303             --
1304             g_debug_mode         := p_debug_mode;
1305 
1306             ---
1307             --- Logfile is supported for SRS_DBP ONLY
1308             ---
1309             IF    g_debug_mode      IN ('SRS_DBP','DBP') THEN
1310                g_mode  := g_srs_mode;
1311             ELSIF g_debug_mode      IN ('OF') THEN
1312                g_mode  := g_of_mode;
1313             END IF;
1314 
1315             --
1316             -- Depending on the mode
1317             -- * Launch the tracer
1318             -- * open the file
1319             --
1320             IF    g_mode IN       (c_mode_tracer
1321                                   ,c_mode_stracer
1322                                   ,c_mode_jtracer) THEN
1323 
1324                SubmitTracer;
1325             ELSIF g_mode  = 'FILE'                    THEN
1326                open_file;
1327             END IF;
1328 
1329             --
1330             -- Switch the trace ON after initialization
1331             --
1332             g_debug             := TRUE;
1333 
1334          END IF;
1335 
1336          --
1337          -- Open SRS files since the first call may perform a commit.
1338          --
1339          -- This call must be made in SRS context. To verify this, we check whether the Trace
1340          -- is ON or OFF for SRS_DBP calls
1341          --
1342          IF  p_debug_mode IN ('SRS_DBP')  THEN
1343             open_srs_files;
1344          END IF;
1345 
1346       ELSIF p_debug_mode IN ('OUTPUT')  THEN
1347 
1348          --
1349          -- Trace activated from SQL*Plus or SQL*Dba
1350          -- The level trace is setup to the max level
1351          --
1352          g_debug_mode  := p_debug_mode;
1353          g_mode        := g_debug_mode;
1354          g_RequestId   := NULL;
1355          g_Location    := p_Location;
1356          g_debug       := TRUE;
1357 
1358 
1359       ELSIF p_debug_mode IN ('STD_DBP') THEN
1360 
1361          --
1362          -- Trace undirectly activated from non XLA packages
1363          --
1364          IF  g_trace = 'Y' THEN
1365             open_file;
1366             g_debug_mode  := p_debug_mode;
1367             g_mode        := g_debug_mode;
1368             g_RequestId   := NULL;
1369             g_Location    := p_Location;
1370             g_debug       := TRUE;
1371          END IF;
1372 
1373       ELSIF p_debug_mode IN ('FILE') THEN
1374 
1375          --
1376          -- Trace activated from one anonymous package from SQL*Plus
1377          --
1378          open_file;
1379          g_debug_mode  := p_debug_mode;
1380          g_mode        := g_debug_mode;
1381          g_RequestId   := NULL;
1382          g_Location    := p_Location;
1383          g_debug       := TRUE;
1384 
1385       ELSIF p_debug_mode IN ('HTML','HTM') THEN
1386 
1387          --
1388          -- Trace activated from one anonymous package from SQL*Plus
1389          --
1390 
1391          g_debug_mode  := p_debug_mode;
1392          g_mode        := g_debug_mode;
1393          g_RequestId   := NULL;
1394          g_Location    := p_Location;
1395          g_debug       := TRUE;
1396 
1397       ELSIF p_debug_mode IN ('AFLOG')      THEN
1398 
1399          --
1400          -- Trace activated in AFLOG mode
1401          --
1402 
1403          g_debug_mode  := p_debug_mode;
1404          g_mode        := g_debug_mode;
1405          g_RequestId   := NULL;
1406          g_Location    := p_Location;
1407          g_debug       := TRUE;
1408 
1409       END IF;
1410 
1411       IF g_stat       = 'Y' THEN
1412          set_stat_on;
1413       END IF;
1414 
1415       --
1416       -- Print the standard header
1417       --
1418       print_header;
1419 
1420    END IF;
1421 END IF;
1422 END Activate;
1423 
1424 
1425 
1426 /*======================================================================+
1427 |                                                                       |
1428 | Public Procedure                                                      |
1429 |                                                                       |
1430 | deactivate                                                            |
1431 |                                                                       |
1432 | De-Activate, if set, the XLA utility mode.                            |
1433 |                                                                       |
1434 +======================================================================*/
1435 PROCEDURE Deactivate
1436   (p_Location                     IN  VARCHAR2)
1437 IS
1438 
1439 l_timeout                         INTEGER;
1440 l_old_stat                        VARCHAR2(1);
1441 
1442 BEGIN
1443 
1444 --
1445 -- Need to handle situation when origin location = ending location
1446 --
1447 IF g_location = p_Location THEN
1448 
1449    --
1450    -- Unactivate the stat, if enabled
1451    --
1452    l_old_stat      := g_stat;
1453 
1454    IF g_stat        = 'Y' THEN
1455       set_stat_off;
1456    END IF;
1457 
1458    --
1459    -- Need to print a footer when Trace or Stat is ON
1460    --
1461    IF g_debug   THEN
1462 
1463       ---
1464       --- Handle timeouts/write failures, forced to 20 seconds
1465       ---
1466       l_timeout            := g_timeout;
1467       g_timeout            := 20;
1468 
1469       BEGIN
1470       --
1471       -- Print the standard footer as well as the statistics
1472       --
1473       IF l_old_stat   = 'Y' THEN
1474          print_stat_info;
1475       END IF;
1476 
1477       print_footer;
1478 
1479       EXCEPTION
1480       WHEN xla_exceptions_pkg.application_exception THEN
1481          NULL;
1482       END;
1483 
1484       --
1485       -- Reset the timeout to the actual value
1486       --
1487       l_timeout  := g_timeout;
1488 
1489       --
1490       -- If any of them apply
1491       --   Shutdown the tracer
1492       --   Close the file
1493       --
1494       IF g_mode  IN (c_mode_tracer
1495                      ,c_mode_stracer
1496                      ,c_mode_jtracer) THEN
1497 
1498          BEGIN
1499          stop_tracer;
1500          EXCEPTION
1501          WHEN xla_exceptions_pkg.application_exception THEN
1502             NULL;
1503          END;
1504       ELSIF g_mode IN ('FILE') THEN
1505          close_file;
1506       END IF;
1507    END IF;
1508 
1509    --
1510    -- Reset all variables
1511    --
1512    g_debug := FALSE;
1513 
1514    reset_options;
1515 ELSE
1516    trace('Deactivate rejected        = ' || p_location       ,  10);
1517 END IF;
1518 END DeActivate;
1519 
1520 
1521 
1522 /*======================================================================+
1523 |                                                                       |
1524 | Public Procedure                                                      |
1525 |                                                                       |
1526 | set_location                                                          |
1527 |                                                                       |
1528 | Set any option.                                                       |
1529 |                                                                       |
1530 +======================================================================*/
1531 PROCEDURE set_option
1532   (p_option                       IN  VARCHAR2
1533   ,p_option_value                 IN  VARCHAR2)
1534 
1535 IS
1536 
1537 BEGIN
1538 IF    p_option = 'TRACE_LEVEL'                THEN
1539    g_dflt_trace_level              := p_option_value;
1540 ELSIF p_option = 'PROFILER'                   THEN
1541    g_dflt_profiler                 := p_option_value;
1542 ELSIF p_option = 'HEADER'                     THEN
1543    g_dflt_header                   := p_option_value;
1544 ELSIF p_option = 'FOOTER'                     THEN
1545    g_dflt_footer                   := p_option_value;
1546 ELSIF p_option = 'TRACE_DATETIME'             THEN
1547    g_dflt_trace_datetime           := p_option_value;
1548 ELSIF p_option = 'SQLTRACE'                   THEN
1549    g_dflt_sqltrace                 := p_option_value;
1550 ELSIF p_option = 'FILE_FLUSH_OPTION'          THEN
1551    g_dflt_file_flush_option        := p_option_value;
1552 ELSIF p_option = 'FILE_OVERRIDE_DIRECTORY'    THEN
1553    g_dflt_file_override_directory := p_option_value;
1554 ELSIF p_option = 'FILE_OVERRIDE_FILENAME'     THEN
1555    g_dflt_file_override_filename  := p_option_value;
1556 ELSIF p_option = 'TRACE'                      THEN
1557    g_dflt_trace                   := p_option_value;
1558 ELSIF p_option = 'SRS_MODE'                   THEN
1559    g_dflt_srs_mode                := p_option_value;
1560 ELSIF p_option = 'OF_MODE'                    THEN
1561    g_dflt_of_mode                 := p_option_value;
1562 ELSIF p_option = 'TIMEOUT'                    THEN
1563    g_dflt_timeout                 := p_option_value;
1564 ELSIF p_option = 'SRS_OUTPUT_ENABLE'          THEN
1565    g_dflt_srs_output_enable       := p_option_value;
1566 ELSE
1567    xla_exceptions_pkg.raise_message
1568      ('XLA'      ,'XLA_INTERNAL_ERROR'
1569      ,'ERROR'    ,'Invalid option '||p_option
1570      ,'LOCATION' ,'xla_utility_pkg.set_option');
1571 END IF;
1572 END set_option;
1573 
1574 
1575 /*======================================================================+
1576 |                                                                       |
1577 |                                                                       |
1578 |                                                                       |
1579 |                                                                       |
1580 |                                                                       |
1581 |                                                                       |
1582 |                                                                       |
1583 |                                                                       |
1584 |                                                                       |
1585 |                                                                       |
1586 |                                                                       |
1587 |                                                                       |
1588 |                                                                       |
1589 |                                                                       |
1590 |                                                                       |
1591 |                                                                       |
1592 |                                                                       |
1593 |                                                                       |
1594 |                                                                       |
1595 |                                                                       |
1596 | Tracer                                                                |
1597 |                                                                       |
1598 |                                                                       |
1599 |                                                                       |
1600 |                                                                       |
1601 |                                                                       |
1602 |                                                                       |
1603 |                                                                       |
1604 |                                                                       |
1605 |                                                                       |
1606 |                                                                       |
1607 |                                                                       |
1608 |                                                                       |
1609 |                                                                       |
1610 |                                                                       |
1611 |                                                                       |
1612 |                                                                       |
1613 |                                                                       |
1614 |                                                                       |
1615 |                                                                       |
1616 |                                                                       |
1617 +======================================================================*/
1618 
1619 
1620 /*======================================================================+
1621 |                                                                       |
1622 |                                                                       |
1623 |                                                                       |
1624 |                                                                       |
1625 |                                                                       |
1626 | Public Trace procedures                                               |
1627 |                                                                       |
1628 |                                                                       |
1629 |                                                                       |
1630 |                                                                       |
1631 |                                                                       |
1632 +======================================================================*/
1633 
1634 /*======================================================================+
1635 |                                                                       |
1636 | Public Procedure                                                      |
1637 |                                                                       |
1638 | Activate_trace                                                        |
1639 |                                                                       |
1640 | Activate, if set, the XLA Trace.                                      |
1641 |                                                                       |
1642 +======================================================================*/
1643 PROCEDURE Activate_trace
1644   (p_debug_mode                   IN  VARCHAR2
1645   ,p_location                     IN  VARCHAR2)
1646 
1647 IS
1648 
1649 BEGIN
1650 IF NOT g_debug THEN
1651    g_dflt_trace := 'Y';
1652 
1653    activate
1654      (p_debug_mode   => p_debug_mode
1655      ,p_location     => p_location);
1656 
1657 END IF;
1658 END Activate_trace;
1659 
1660 
1661 /*======================================================================+
1662 |                                                                       |
1663 | Public Procedure                                                      |
1664 |                                                                       |
1665 | DeActivate_trace                                                      |
1666 |                                                                       |
1667 | De-Activate, if set, the XLA Trace, if called by the same funtion that|
1668 | activated.                                                            |
1669 |                                                                       |
1670 +======================================================================*/
1671 PROCEDURE Deactivate_trace
1672   (p_Location                     IN  VARCHAR2 )
1673 
1674 IS
1675 
1676 BEGIN
1677 deactivate
1678   (p_location => p_location);
1679 END Deactivate_trace;
1680 
1681 
1682 /*======================================================================+
1683 |                                                                       |
1684 | Public Procedure                                                      |
1685 |                                                                       |
1686 | set_traceoff                                                         |
1687 |                                                                       |
1688 | Switch the trace off.                                                 |
1689 |                                                                       |
1690 +======================================================================*/
1691 PROCEDURE set_trace_off
1692 
1693 IS
1694 
1695 BEGIN
1696 g_trace := 'N';
1697 END set_trace_off;
1698 
1699 
1700 /*======================================================================+
1701 |                                                                       |
1702 | Public Procedure                                                      |
1703 |                                                                       |
1704 | set_trace_on                                                          |
1705 |                                                                       |
1706 | Switch the trace on.                                                  |
1707 |                                                                       |
1708 +======================================================================*/
1709 PROCEDURE set_trace_on
1710 
1711 IS
1712 
1713 BEGIN
1714 g_trace := 'Y';
1715 END set_trace_on;
1716 
1717 
1718 /*======================================================================+
1719 |                                                                       |
1720 | Public Procedure                                                      |
1721 |                                                                       |
1722 | trace                                                                 |
1723 |                                                                       |
1724 | Print the trace message                                               |
1725 |                                                                       |
1726 +======================================================================*/
1727 PROCEDURE trace
1728   (p_msg                          IN  VARCHAR2
1729   ,p_level                        IN  NUMBER  )
1730 
1731 IS
1732 
1733 l_cr                              INTEGER;
1734 
1735 BEGIN
1736 IF ((g_trace        = 'Y'
1737 AND  p_level       <= g_trace_level
1738 AND  g_trace_level >= 0)
1739 OR  (g_trace        = 'Y'
1740 AND  p_level       >= ABS(g_trace_level )
1741 AND  g_trace_level  < 0)
1742 OR  (g_trace        = 'N'
1743 AND  p_level        < 0))
1744 AND  g_debug               THEN
1745    print(p_msg);
1746 END IF;
1747 END trace;
1748 
1749 
1750 /*======================================================================+
1751 |                                                                       |
1752 | Public Procedure                                                      |
1753 |                                                                       |
1754 | print_trace_info                                                      |
1755 |                                                                       |
1756 | Print all information related to the trace to the std Trace output.   |
1757 |                                                                       |
1758 +======================================================================*/
1759 PROCEDURE print_trace_info
1760 
1761 IS
1762 
1763 BEGIN
1764 NULL;
1765 END print_trace_info;
1766 
1767 
1768 /*======================================================================+
1769 |                                                                       |
1770 | Public Function                                                       |
1771 |                                                                       |
1772 | get_session_info                                                      |
1773 |                                                                       |
1774 | Return system informations about the current session.                 |
1775 |                                                                       |
1776 +======================================================================*/
1777 FUNCTION  get_session_info
1778   (p_option                       IN  VARCHAR2)
1779 RETURN VARCHAR2
1780 
1781 IS
1782 
1783 BEGIN
1784 IF    p_option = 'SESSION_ID'                   THEN
1785    RETURN xla_environment_pkg.g_session_id;
1786 ELSIF p_option = 'PROCESS_ID'                   THEN
1787    RETURN xla_environment_pkg.g_process_id;
1788 ELSE
1789    xla_exceptions_pkg.raise_message
1790      ('XLA'      ,'XLA_INTERNAL_ERROR'
1791      ,'ERROR'    ,'Invalid option '||p_option
1792      ,'LOCATION' ,'xla_utility_pkg.get_session_info');
1793 END IF;
1794 END get_session_info;
1795 
1796 
1797 /*======================================================================+
1798 |                                                                       |
1799 | Public Function                                                       |
1800 |                                                                       |
1801 | get_option_value                                                      |
1802 |                                                                       |
1803 | Set any option.                                                       |
1804 |                                                                       |
1805 +======================================================================*/
1806 FUNCTION  get_option_value
1807   (p_option                       IN  VARCHAR2)
1808 RETURN VARCHAR2
1809 IS
1810 BEGIN
1811 IF p_option = 'TIMEOUT'                      THEN
1812    RETURN g_timeout;
1813 ELSIF p_option = 'DEBUG'                        THEN
1814    RETURN g_trace;
1815 ELSIF p_option = 'TRACE_LEVEL'                  THEN
1816    RETURN g_trace_level;
1817 ELSE
1818    xla_exceptions_pkg.raise_message
1819      ('XLA'      ,'XLA_INTERNAL_ERROR'
1820      ,'ERROR'    ,'Invalid option '||p_option
1821      ,'LOCATION' ,'xla_utility_pkg.get_session_info');
1822 END IF;
1823 END;
1824 
1825 
1826 /*======================================================================+
1827 |                                                                       |
1828 |                                                                       |
1829 |                                                                       |
1830 |                                                                       |
1831 |                                                                       |
1832 |                                                                       |
1833 |                                                                       |
1834 |                                                                       |
1835 |                                                                       |
1836 |                                                                       |
1837 |                                                                       |
1838 |                                                                       |
1839 |                                                                       |
1840 |                                                                       |
1841 |                                                                       |
1842 |                                                                       |
1843 |                                                                       |
1844 |                                                                       |
1845 |                                                                       |
1846 |                                                                       |
1847 | Print                                                                 |
1848 |                                                                       |
1849 |                                                                       |
1850 |                                                                       |
1851 |                                                                       |
1852 |                                                                       |
1853 |                                                                       |
1854 |                                                                       |
1855 |                                                                       |
1856 |                                                                       |
1857 |                                                                       |
1858 |                                                                       |
1859 |                                                                       |
1860 |                                                                       |
1861 |                                                                       |
1862 |                                                                       |
1863 |                                                                       |
1864 |                                                                       |
1865 |                                                                       |
1866 |                                                                       |
1867 |                                                                       |
1868 +======================================================================*/
1869 
1870 /*======================================================================+
1871 |                                                                       |
1872 | Public Procedure                                                      |
1873 |                                                                       |
1874 | print                                                                 |
1875 |                                                                       |
1876 | Debugging. Msg will be printed in the std debug output.               |
1877 |                                                                       |
1878 +======================================================================*/
1879 PROCEDURE print
1880   (p_msg                          IN  VARCHAR2)
1881 IS
1882 BEGIN
1883 IF    g_mode            IN (c_mode_tracer
1884                            ,c_mode_jtracer
1885                            ,c_mode_stracer) THEN
1886    print_pipe(convert_msg(p_msg));
1887 ELSIF g_mode     = 'LOGFILE'           THEN
1888    print_fndfile(convert_msg(p_msg));
1889 ELSIF g_mode    IN ('AFLOG')           THEN
1890    print_aflog(convert_msg(p_msg));
1891 ELSIF g_mode    IN ('FILE')            THEN
1892    print_file(convert_msg(p_msg));
1893 ELSIF g_mode    IN ('OUTPUT')          THEN
1894    print_output(convert_msg(p_msg));
1895 ELSIF g_mode    IN ('HTML')            THEN
1896    print_html(convert_msg(p_msg));
1897 ELSE
1898    --
1899    -- New mode probably, need to trace off before raising exception
1900    -- to prevent entering in an infinite loop
1901    --
1902    g_trace := 'N';
1903    xla_exceptions_pkg.raise_message  ('XLA'         , 'XLA_TRACE_INV_MODE'
1904                                         ,'MODE'        , g_mode);
1905 END IF;
1906 END print;
1907 
1908 
1909 
1910 /*======================================================================+
1911 |                                                                       |
1912 |                                                                       |
1913 |                                                                       |
1914 |                                                                       |
1915 |                                                                       |
1916 |                                                                       |
1917 |                                                                       |
1918 |                                                                       |
1919 |                                                                       |
1920 |                                                                       |
1921 |                                                                       |
1922 |                                                                       |
1923 |                                                                       |
1924 |                                                                       |
1925 |                                                                       |
1926 |                                                                       |
1927 |                                                                       |
1928 |                                                                       |
1929 |                                                                       |
1930 |                                                                       |
1931 | Statistics                                                            |
1932 |                                                                       |
1933 |                                                                       |
1934 |                                                                       |
1935 |                                                                       |
1936 |                                                                       |
1937 |                                                                       |
1938 |                                                                       |
1939 |                                                                       |
1940 |                                                                       |
1941 |                                                                       |
1942 |                                                                       |
1943 |                                                                       |
1944 |                                                                       |
1945 |                                                                       |
1946 |                                                                       |
1947 |                                                                       |
1948 |                                                                       |
1949 |                                                                       |
1950 |                                                                       |
1951 |                                                                       |
1952 +======================================================================*/
1953 
1954 
1955 /*======================================================================+
1956 |                                                                       |
1957 | Public Procedure                                                      |
1958 |                                                                       |
1959 | Activate_stat                                                         |
1960 |                                                                       |
1961 | Activate the statistics.                                              |
1962 |                                                                       |
1963 +======================================================================*/
1964 PROCEDURE Activate_stat
1965   (p_debug_mode                   IN  VARCHAR2
1966   ,p_location                     IN  VARCHAR2)
1967 
1968 IS
1969 
1970 BEGIN
1971 IF NOT g_debug THEN
1972    g_dflt_profiler := 'Y';
1973 
1974    activate
1975      (p_debug_mode   => p_debug_mode
1976      ,p_location     => p_location);
1977 
1978 END IF;
1979 END Activate_stat;
1980 
1981 
1982 /*======================================================================+
1983 |                                                                       |
1984 | Public Procedure                                                      |
1985 |                                                                       |
1986 | DeActivate_stat                                                       |
1987 |                                                                       |
1988 | De-Activate, if set, the XLA Statistics.                              |
1989 |                                                                       |
1990 +======================================================================*/
1991 PROCEDURE Deactivate_stat
1992   (p_Location                     IN  VARCHAR2 )
1993 
1994 IS
1995 
1996 BEGIN
1997 deactivate
1998   (p_location => p_location);
1999 END Deactivate_stat;
2000 
2001 
2002 /*======================================================================+
2003 |                                                                       |
2004 | Public Procedure                                                      |
2005 |                                                                       |
2006 | set_stat_on                                                           |
2007 |                                                                       |
2008 | Switch the stat on.                                                   |
2009 |                                                                       |
2010 +======================================================================*/
2011 PROCEDURE set_stat_on
2012 
2013 IS
2014 
2015 BEGIN
2016 IF g_profiler            = 'Y' THEN
2017    xla_utility_profiler_pkg.start_profiler;
2018 END IF;
2019 
2020 g_stat_datetime_start := dbms_utility.get_time;
2021 
2022 g_stat := 'Y';
2023 END set_stat_on;
2024 
2025 
2026 /*======================================================================+
2027 |                                                                       |
2028 | Public Procedure                                                      |
2029 |                                                                       |
2030 | set_stat_off                                                          |
2031 |                                                                       |
2032 | Switch the stat off.                                                  |
2033 |                                                                       |
2034 +======================================================================*/
2035 PROCEDURE set_stat_off
2036 
2037 IS
2038 
2039 BEGIN
2040 IF g_stat = 'Y' THEN
2041    g_stat_datetime_stop := dbms_utility.get_time;
2042 
2043    IF g_profiler = 'Y' THEN
2044       xla_utility_profiler_pkg.stop_profiler;
2045    END IF;
2046    g_stat := 'N';
2047 END IF;
2048 END set_stat_off;
2049 
2050 
2051 
2052 /*======================================================================+
2053 |                                                                       |
2054 | Public Function                                                       |
2055 |                                                                       |
2056 | get_stat_info                                                         |
2057 |                                                                       |
2058 | Return a statistic information                                        |
2059 |                                                                       |
2060 +======================================================================*/
2061 FUNCTION  get_stat_info
2062   (p_option                       IN  VARCHAR2)
2063 RETURN VARCHAR2
2064 
2065 IS
2066 
2067 BEGIN
2068 IF    p_option = 'DURATION'                   THEN
2069    RETURN TO_CHAR(g_stat_datetime_stop
2070            -      g_stat_datetime_start);
2071 ELSE
2072    xla_exceptions_pkg.raise_message
2073      ('XLA'      ,'XLA_INTERNAL_ERROR'
2074      ,'ERROR'    ,'Invalid option '||p_option
2075      ,'LOCATION' ,'xla_utility_pkg.set_option');
2076 END IF;
2077 END get_stat_info;
2078 
2079 
2080 /*======================================================================+
2081 |                                                                       |
2082 | Public Procedure                                                      |
2083 |                                                                       |
2084 | print_stat_info                                                       |
2085 |                                                                       |
2086 | Print all information related to the stat to the std Trace output.    |
2087 |                                                                       |
2088 +======================================================================*/
2089 PROCEDURE print_stat_info
2090 
2091 IS
2092 
2093 BEGIN
2094 -- to be enhanced to support timing across days
2095 print(RPAD('+',76,'-')||'+');
2096 print(RPAD('Duration ',c_equal_position -1)
2097              || '= '
2098              ||
2099                 TO_CHAR(g_stat_datetime_stop
2100                  -      g_stat_datetime_start));
2101 print(RPAD('+',76,'-')||'+');
2102 
2103 IF g_profiler = 'Y' THEN
2104    g_format := 'N';
2105    xla_utility_profiler_pkg.dump_profiler_data;
2106    g_format := 'Y';
2107 END IF;
2108 END print_stat_info;
2109 
2110 
2111 /*======================================================================+
2112 |                                                                       |
2113 |                                                                       |
2114 |                                                                       |
2115 |                                                                       |
2116 |                                                                       |
2117 |                                                                       |
2118 |                                                                       |
2119 |                                                                       |
2120 |                                                                       |
2121 |                                                                       |
2122 |                                                                       |
2123 |                                                                       |
2124 |                                                                       |
2125 |                                                                       |
2126 |                                                                       |
2127 |                                                                       |
2128 |                                                                       |
2129 |                                                                       |
2130 |                                                                       |
2131 |                                                                       |
2132 | SQL_Trace                                                             |
2133 |                                                                       |
2134 |                                                                       |
2135 |                                                                       |
2136 |                                                                       |
2137 |                                                                       |
2138 |                                                                       |
2139 |                                                                       |
2140 |                                                                       |
2141 |                                                                       |
2142 |                                                                       |
2143 |                                                                       |
2144 |                                                                       |
2145 |                                                                       |
2146 |                                                                       |
2147 |                                                                       |
2148 |                                                                       |
2149 |                                                                       |
2150 |                                                                       |
2151 |                                                                       |
2152 |                                                                       |
2153 +======================================================================*/
2154 
2155 
2156 /*======================================================================+
2157 |                                                                       |
2158 | Public Procedure                                                      |
2159 |                                                                       |
2160 | init_sqltrace                                                         |
2161 |                                                                       |
2162 | Alter the session to enter in sql_trace mode.                         |
2163 |                                                                       |
2164 +======================================================================*/
2165 PROCEDURE set_sqltrace_on
2166 
2167 IS
2168 
2169 BEGIN
2170 IF g_sqltrace = 'Y' THEN
2171    dbms_session.set_sql_trace(TRUE);
2172 END IF;
2173 END;
2174 
2175 
2176 /*======================================================================+
2177 |                                                                       |
2178 | Public Procedure                                                      |
2179 |                                                                       |
2180 | sqltrace_off                                                          |
2181 |                                                                       |
2182 | Alter the session to finish the sql trace mode.                       |
2183 |                                                                       |
2184 +======================================================================*/
2185 PROCEDURE set_sqltrace_off
2186 
2187 IS
2188 
2189 BEGIN
2190 IF g_sqltrace = 'Y' THEN
2191   dbms_session.set_sql_trace(FALSE);
2192 END IF;
2193 END;
2194 
2195 
2196 /*======================================================================+
2197 |                                                                       |
2198 |                                                                       |
2199 |                                                                       |
2200 |                                                                       |
2201 |                                                                       |
2202 |                                                                       |
2203 |                                                                       |
2204 |                                                                       |
2205 |                                                                       |
2206 |                                                                       |
2207 |                                                                       |
2208 |                                                                       |
2209 |                                                                       |
2210 |                                                                       |
2211 |                                                                       |
2212 |                                                                       |
2213 |                                                                       |
2214 |                                                                       |
2215 |                                                                       |
2216 |                                                                       |
2217 | SRS log and output files utilities                                    |
2218 |                                                                       |
2219 |                                                                       |
2220 |                                                                       |
2221 |                                                                       |
2222 |                                                                       |
2223 |                                                                       |
2224 |                                                                       |
2225 |                                                                       |
2226 |                                                                       |
2227 |                                                                       |
2228 |                                                                       |
2229 |                                                                       |
2230 |                                                                       |
2231 |                                                                       |
2232 |                                                                       |
2233 |                                                                       |
2234 |                                                                       |
2235 |                                                                       |
2236 |                                                                       |
2237 |                                                                       |
2238 +======================================================================*/
2239 
2240 
2241 /*======================================================================+
2242 |                                                                       |
2243 | Public Procedure                                                      |
2244 |                                                                       |
2245 | print_logfile                                                         |
2246 |                                                                       |
2247 | Print the messgage to the fnd logfile                                 |
2248 |                                                                       |
2249 | Parameters                                                            |
2250 |             1  IN  p_msg                VARCHAR2 Debug message        |
2251 |                                                                       |
2252 +======================================================================*/
2253 PROCEDURE print_outputfile
2254   (p_msg                          IN  VARCHAR2)
2255 
2256 IS
2257 
2258 BEGIN
2259 IF  g_RequestId      NOT IN (-1,0)
2260 AND g_srs_output_enable   = 'Y' THEN
2261    fnd_file.put_line(fnd_file.output,p_msg);
2262 END IF;
2263 END print_outputfile;
2264 
2265 
2266 /*======================================================================+
2267 |                                                                       |
2268 | Public Procedure                                                      |
2269 |                                                                       |
2270 | print_logfile                                                         |
2271 |                                                                       |
2272 | Print the messgage to the fnd output file                             |
2273 |                                                                       |
2274 | Parameters                                                            |
2275 |             1  IN  p_msg                VARCHAR2 Debug message        |
2276 |                                                                       |
2277 +======================================================================*/
2278 PROCEDURE print_logfile        (p_msg                          IN  VARCHAR2)
2279 IS
2280 
2281 BEGIN
2282 IF  g_RequestId      NOT IN (0,-1)
2283 AND g_srs_output_enable   = 'Y' THEN
2284    fnd_file.put_line(fnd_file.log,p_msg);
2285 END IF;
2286 END print_logfile;
2287 
2288 
2289 /*======================================================================+
2290 |                                                                       |
2291 |                                                                       |
2292 |                                                                       |
2293 |                                                                       |
2294 |                                                                       |
2295 |                                                                       |
2296 |                                                                       |
2297 |                                                                       |
2298 |                                                                       |
2299 |                                                                       |
2300 |                                                                       |
2301 |                                                                       |
2302 |                                                                       |
2303 |                                                                       |
2304 |                                                                       |
2305 |                                                                       |
2306 |                                                                       |
2307 |                                                                       |
2308 |                                                                       |
2309 |                                                                       |
2310 | Reset                                                                 |
2311 |                                                                       |
2312 |                                                                       |
2313 |                                                                       |
2314 |                                                                       |
2315 |                                                                       |
2316 |                                                                       |
2317 |                                                                       |
2318 |                                                                       |
2319 |                                                                       |
2320 |                                                                       |
2321 |                                                                       |
2322 |                                                                       |
2323 |                                                                       |
2324 |                                                                       |
2325 |                                                                       |
2326 |                                                                       |
2327 |                                                                       |
2328 |                                                                       |
2329 |                                                                       |
2330 |                                                                       |
2331 +======================================================================*/
2332 
2333 /*======================================================================+
2334 |                                                                       |
2335 | Private Procedure                                                     |
2336 |                                                                       |
2337 | reset                                                                 |
2338 |                                                                       |
2339 | Reset the global variables.                                           |
2340 | instanciated.                                                         |
2341 |                                                                       |
2342 +======================================================================*/
2343 PROCEDURE reset
2344 IS
2345 BEGIN
2346 xla_environment_pkg.refresh;
2347 set_default_options;
2348 g_stat := 'N';
2349 END reset;
2350 
2351 
2352 BEGIN
2353 reset;
2354 
2355 END xla_utility_pkg;