[Home] [Help]
PACKAGE BODY: APPS.WSH_DEBUG_SV
Source
1 PACKAGE BODY WSH_DEBUG_SV as
2 /* $Header: WSHDEBGB.pls 120.2 2007/08/06 13:40:03 ueshanka noship $ */
3 /*========================== WSH_core_sv ============================*/
4
5 g_debug_flag BOOLEAN := FALSE; -- used only by old debugger code.
6 g_RunMode VARCHAR2(30);
7 --g_DebugMode NUMBER;
8 g_DebugCount NUMBER := 0;
9
10 --g_Debug BOOLEAN := fnd_api.to_boolean(fnd_profile.value ('WSH_DEBUG_MODE'));
11 --g_Debug BOOLEAN := NULL;
12 g_Profiler BOOLEAN := fnd_api.to_boolean(fnd_profile.value ('WSH_PROFILER_ENABLED'));
13 g_file_prefix Varchar2(100) := fnd_profile.value('WSH_DEBUG_FILE_PREFIX');
14
15 g_Level NUMBER;
16 g_Module VARCHAR2(32767);
17 g_DebugAll BOOLEAN := FALSE;
18
19 g_user_name VARCHAR2(200);
20 g_session_id NUMBER;
21 g_run_id NUMBER;
22 g_dbms_profiler binary_integer;
23
24 g_Debugger_initialized BOOLEAN := FALSE;
25 g_inv_dbg_file varchar2(32767);
26 g_oe_dbg_file varchar2(32767);
27
28 g_VersionStack t_CallStack;
29 g_PkgStack t_CallStack;
30
31 g_indent VARCHAR2(500);
32
33 g_file_bak VARCHAR2(32767);
34 g_dir_bak VARCHAR2(32767);
35
36 /*===========================================================================
37
38 PROCEDURE NAME: level_defined
39
40 ===========================================================================*/
41 FUNCTION level_defined(x_Level IN NUMBER)
42 RETURN BOOLEAN
43 IS
44
45 BEGIN
46 IF g_Level <= x_Level THEN
47 RETURN(TRUE);
48 END IF;
49 RETURN(FALSE);
50
51 EXCEPTION
52 WHEN OTHERS THEN
53 --dbg_file.log('err in level_defined:'||substrb(sqlerrm,1,200));
54 RETURN(FALSE);
55 END level_defined;
56
57
58 /*===========================================================================
59
60 PROCEDURE NAME: tstart
61
62 ===========================================================================*/
63 PROCEDURE tstart(x_Marker IN VARCHAR2)
64 IS
65 v_Position NUMBER := 0;
66 BEGIN
67 IF wsh_debug_interface.g_Debug THEN
68 FOR v_Count IN 1..g_TimeStack.COUNT LOOP
69 IF g_TimeStack(v_Count).Marker = x_Marker THEN
70 v_Position := v_Count;
71 EXIT;
72 END IF;
73 END LOOP;
74 IF v_Position = 0 THEN
75 v_Position := g_TimeStack.COUNT + 1;
76 g_TimeStack(v_Position).Marker := x_Marker;
77 g_TimeStack(v_Position).TotalTime := 0;
78 g_TimeStack(v_Position).CallCount := 0;
79 END IF;
80 g_TimeStack(v_Position).Time := dbms_utility.get_time;
81 g_TimeStack(v_Position).CallCount := g_TimeStack(v_Position).CallCount + 1;
82 END IF;
83 EXCEPTION
84 WHEN OTHERS THEN
85 --dbg_file.log('err in tstart:'||substrb(sqlerrm,1,200));
86 wsh_debug_interface.g_Debug := FALSE;
87 --raise;
88 END tstart;
89
90 /*===========================================================================
91 PROCEDURE NAME: tstop
92 ===========================================================================*/
93 PROCEDURE tstop(x_Marker IN VARCHAR2)
94 IS
95 BEGIN
96 IF wsh_debug_interface.g_Debug THEN
97 FOR v_Count IN 1..g_TimeStack.COUNT LOOP
98 IF g_TimeStack(v_Count).Marker = x_Marker THEN
99 g_TimeStack(v_Count).TotalTime := g_TimeStack(v_Count).TotalTime +
100 ((( dbms_utility.get_time -
101 g_TimeStack(v_Count).Time)/100));
102 EXIT;
103 END IF;
104 END LOOP;
105 END IF;
106 EXCEPTION
107 WHEN OTHERS THEN
108 wsh_debug_interface.g_Debug := FALSE;
109 --raise;
110 END tstop;
111
112 /*===========================================================================
113 FUNCTION NAME: tprint
114 ===========================================================================*/
115 FUNCTION tprint(x_Marker IN VARCHAR2) RETURN VARCHAR2
116 IS
117 BEGIN
118 IF wsh_debug_interface.g_Debug THEN
119 FOR v_Count IN 1..g_TimeStack.COUNT LOOP
120 IF g_TimeStack(v_Count).Marker = x_Marker THEN
121 RETURN(ROUND(((dbms_utility.get_time - g_TimeStack(v_Count).Time)/100),2)||' seconds');
122
123 END IF;
124 END LOOP;
125 RETURN(NULL);
126 END IF;
127 EXCEPTION
128 WHEN OTHERS THEN
129 wsh_debug_interface.g_Debug := FALSE;
130 --raise;
131 END tprint;
132
133 /*===========================================================================
134 PROCEDURE NAME: tdump
135 ===========================================================================*/
136 --PROCEDURE tdump(x_Context IN VARCHAR2 DEFAULT NULL)
137 PROCEDURE tdump(x_Context IN VARCHAR2)
141 --write_output(make_space||'Time Dump ('||x_Context||')');
138 IS
139 BEGIN
140 IF wsh_debug_interface.g_Debug THEN
142 FOR v_Count IN 1..g_TimeStack.COUNT LOOP
143 write_output(make_space||g_TimeStack(v_Count).Marker||' : '||
144 g_TimeStack(v_Count).CallCount||' calls : '||
145 ROUND(g_TimeStack(v_Count).TotalTime,2)||' seconds');
146 END LOOP;
147 g_TimeStack.DELETE;
148 END IF;
149 EXCEPTION
150 WHEN OTHERS THEN
151 wsh_debug_interface.g_Debug := FALSE;
152 --raise;
153 END tdump;
154
155 PROCEDURE print_mesg(x_Mesg IN VARCHAR2)
156 IS
157 BEGIN
158
159 --dbg_file.log(x_mesg);
160
161 IF ( nvl(g_RunMode,'!') = 'CONC' ) THEN
162 FND_FILE.put_line(FND_FILE.LOG, x_Mesg);
163 ELSE
164 utl_file.put_line(g_FileHandle, x_Mesg);
165 utl_file.fflush(g_FileHandle);
166 END IF;
167
168 EXCEPTION
169 /*
170 when utl_file.read_error then
171 --dbg_file.log('err in print_mesg:'||'read_error');
172 when utl_file.write_error then
173 --dbg_file.log('err in print_mesg:'||'write_error');
174 when utl_file.invalid_operation then
175 --dbg_file.log('err in print_mesg:'||'invalid op');
176 when utl_file.invalid_filehandle then
177 dbg_file.log('err in print_mesg:'||'invalid filehandle');
178 dbg_file.log('err in print_mesg-1:'||substrb(x_mesg,1,200));
179 dbg_file.log('err in print_mesg-2:'||substrb(x_mesg,201,200));
180 dbg_file.log('err in print_mesg-3:'||substrb(x_mesg,401,200));
181 dbg_file.log('err in print_mesg-4:'||substrb(x_mesg,601,200));
182 dbg_file.log('err in print_mesg-5:'||substrb(x_mesg,801,200));
183 when utl_file.internal_error then
184 dbg_file.log('err in print_mesg:'||'internal_error ');
185 */
186 WHEN OTHERS THEN
187 --dbg_file.log('err in print_mesgrunmode:'||g_runmode);
188 --dbg_file.log('err in print_mesg:'||sqlcode);
189 --dbg_file.log('err in print_mesg:'||substrb(sqlerrm,1,200));
190 --dbg_file.log('err in print_mesg-1:'||substrb(x_mesg,1,200));
191 --dbg_file.log('err in print_mesg-2:'||substrb(x_mesg,201,200));
192 --dbg_file.log('err in print_mesg-3:'||substrb(x_mesg,401,200));
193 --dbg_file.log('err in print_mesg-4:'||substrb(x_mesg,601,200));
194 --dbg_file.log('err in print_mesg-5:'||substrb(x_mesg,801,200));
195 wsh_debug_interface.g_Debug := FALSE;
196 END print_mesg;
197
198 /*===========================================================================
199
200 PROCEDURE NAME: write_output
201
202 ===========================================================================*/
203 PROCEDURE write_output(x_Line IN VARCHAR2)
204 IS
205 l_debug_msg VARCHAR2(2000);
206 v_MesgSize NUMBER;
207 v_Mesg VARCHAR2(32767);
208 BEGIN
209 v_MesgSize := LENGTHB(x_Line);
210 IF v_MesgSize > 500 THEN
211 v_Mesg := x_Line;
212 WHILE v_MesgSize > 500 loop
213 l_debug_msg := SUBSTRB(v_Mesg,1,500);
214 v_Mesg := g_indent || SUBSTRB(v_Mesg,501);
215 v_MesgSize := LENGTHB(v_Mesg);
216 print_mesg(l_debug_msg);
217 END LOOP;
218 IF v_MesgSize BETWEEN 1 AND 500 THEN
219 print_mesg(v_Mesg);
220 END IF;
221 ELSE
222 l_debug_msg := x_line;
223 print_mesg(l_debug_msg);
224 END IF;
225
226 EXCEPTION
227 WHEN OTHERS THEN
228 --dbg_file.log('err in write_output:'||substrb(sqlerrm,1,200));
229 wsh_debug_interface.g_Debug := FALSE;
230 END write_output;
231
232 /*===========================================================================
233 FUNCTION NAME: make_space
234 ===========================================================================*/
235 FUNCTION make_space(x_Mode IN NUMBER := 0)
236 RETURN VARCHAR2
237 IS
238 v_Temp VARCHAR2(500);
239 BEGIN
240
241 v_Temp := RPAD(' ',2*(g_CallStack.COUNT - 1), ' ');
242 IF x_Mode = 0 AND g_CallStack.COUNT > 0 THEN
243 v_Temp := v_Temp||' ';
244 END IF;
245 v_temp := SUBSTRB(v_temp,1,450);
246 g_indent := v_Temp;
247 RETURN(v_Temp);
248
249 EXCEPTION
250 WHEN OTHERS THEN
251 --dbg_file.log('err in make_space:'||substrb(sqlerrm,1,200));
252 wsh_debug_interface.g_Debug := FALSE;
253 END make_space;
254
255 /*===========================================================================
256 PROCEDURE NAME: logmsg
257
258 DESCRIPTION: This procedure prints string followed by a boolean
259 Does not require level and always prints.
260
261
262 ===========================================================================*/
263 --PROCEDURE logmsg(x_Module IN VARCHAR2, x_Text IN VARCHAR2, x_Level IN NUMBER DEFAULT C_STMT_LEVEL)
264 PROCEDURE logmsg(x_Module IN VARCHAR2, x_Text IN VARCHAR2, x_Level IN NUMBER)
265 IS
266 BEGIN
267 IF wsh_debug_interface.g_Debug THEN
268 IF upper(x_Module) like g_Module AND ( g_DebugAll OR level_defined(x_Level) )
269 THEN
270 -- changed to fix bug 2743947
271 -- replacing occurences of g_miss_char in string
272 -- by text "FND_API.G_MISS_CHAR"
273
274 write_output( make_space
275 || REPLACE
276 (
277 x_Text,
278 FND_API.G_MISS_CHAR,
279 'FND_API.G_MISS_CHAR'
280 )
281 );
282 END IF;
283 END IF;
284
285 EXCEPTION
286 WHEN OTHERS THEN
287 wsh_debug_interface.g_Debug := FALSE;
288 --raise;
289 END logmsg;
290
294
291 /*===========================================================================
292
293 PROCEDURE NAME: log - string
295 ===========================================================================*/
296 --PROCEDURE log(x_Module IN VARCHAR2, x_Text IN VARCHAR2, x_Value IN VARCHAR2 := NULL, x_Level IN NUMBER DEFAULT C_STMT_LEVEL)
297 PROCEDURE log(x_Module IN VARCHAR2, x_Text IN VARCHAR2, x_Value IN VARCHAR2 := NULL, x_Level IN NUMBER)
298 IS
299 --v_NullValue VARCHAR2(10) := 'is NULL';
300 v_MISS_CHAR VARCHAR2(30) := 'is FND_API.G_MISS_CHAR';
301 BEGIN
302 IF wsh_debug_interface.g_Debug THEN
303 IF upper(x_Module) like g_Module AND ( g_DebugAll OR level_defined(x_Level) ) THEN
304 IF x_Value IS NULL THEN
305 write_output(make_space||x_Text||C_DELIMITER);
306 ELSIF x_Value = FND_API.G_MISS_CHAR THEN
307 write_output(make_space||x_Text||C_DELIMITER||v_MISS_CHAR);
308 ELSE
309 write_output(make_space||x_Text||C_DELIMITER||x_Value);
310 END IF;
311 END IF;
312 END IF;
313
314 EXCEPTION
315 WHEN OTHERS THEN
316 wsh_debug_interface.g_Debug := FALSE;
317 --raise;
318 END log;
319
320 /*===========================================================================
321 PROCEDURE NAME: log
322
323 DESCRIPTION: This procedure prints string followed by a number
324
325
326 ===========================================================================*/
327 --PROCEDURE log(x_Module IN VARCHAR2, x_Text IN VARCHAR2, x_Value IN NUMBER, x_Level IN NUMBER DEFAULT C_STMT_LEVEL)
328 PROCEDURE log(x_Module IN VARCHAR2, x_Text IN VARCHAR2, x_Value IN NUMBER, x_Level IN NUMBER)
329 IS
330
331 v_NullValue VARCHAR2(10) := 'is NULL';
332 v_MISS_NUM VARCHAR2(30) := 'is FND_API.G_MISS_NUM';
333 BEGIN
334 IF wsh_debug_interface.g_Debug THEN
335 IF upper(x_Module) like g_Module AND ( g_DebugAll OR level_defined(x_Level) ) THEN
336 IF x_Value IS NULL THEN
337 write_output(make_space||x_Text||C_DELIMITER||v_NullValue);
338 ELSIF x_Value = FND_API.G_MISS_NUM THEN
339 write_output(make_space||x_Text||C_DELIMITER||v_MISS_NUM);
340 ELSE
341 write_output(make_space||x_Text||C_DELIMITER||x_Value);
342 END IF;
343 END IF;
344 END IF;
345
346 EXCEPTION
347 WHEN OTHERS THEN
348 wsh_debug_interface.g_Debug := FALSE;
349 --raise;
350 END log;
351
352 /*===========================================================================
353 PROCEDURE NAME: log
354
355 DESCRIPTION: This procedure prints string followed by a date
356
357
358 ===========================================================================*/
359 --PROCEDURE log(x_Module IN VARCHAR2, x_Text IN VARCHAR2, x_Value IN DATE, x_Level IN NUMBER DEFAULT C_STMT_LEVEL, x_Mask IN VARCHAR2 := 'DD-MON-YYYY HH:MI:SS PM')
360 PROCEDURE log(x_Module IN VARCHAR2, x_Text IN VARCHAR2, x_Value IN DATE, x_Level IN NUMBER, x_Mask IN VARCHAR2 := 'MM/DD/YYYY HH:MI:SS PM')
361 IS
362
363 v_NullValue VARCHAR2(10) := 'is NULL';
364 v_MISS_DATE VARCHAR2(30) := 'is FND_API.G_MISS_DATE';
365 BEGIN
366 IF wsh_debug_interface.g_Debug THEN
367 IF upper(x_Module) like g_Module AND ( g_DebugAll OR level_defined(x_Level) ) THEN
368 IF x_Value IS NULL THEN
369 write_output(make_space||x_Text||C_DELIMITER||v_NullValue);
370 ELSIF x_Value = FND_API.G_MISS_DATE THEN
371 write_output(make_space||x_Text||C_DELIMITER||v_MISS_DATE);
372 ELSE
373 --write_output(make_space||x_Text||C_DELIMITER||x_Value);
374 write_output(make_space||x_Text||C_DELIMITER||TO_CHAR(x_Value, x_Mask));
375 END IF;
376 END IF;
377 END IF;
378
379 EXCEPTION
380 WHEN OTHERS THEN
381 wsh_debug_interface.g_Debug := FALSE;
382 --raise;
383 END log;
384
385 /*===========================================================================
386 PROCEDURE NAME: log
387
388 DESCRIPTION: This procedure prints string followed by a boolean
389
390 ===========================================================================*/
391 --PROCEDURE log(x_Module IN VARCHAR2, x_Text IN VARCHAR2, x_Value IN BOOLEAN, x_Level IN NUMBER DEFAULT C_STMT_LEVEL)
392 PROCEDURE log(x_Module IN VARCHAR2, x_Text IN VARCHAR2, x_Value IN BOOLEAN, x_Level IN NUMBER)
393 IS
394
395 v_Value VARCHAR2(10);
396 v_NullValue VARCHAR2(10) := 'is NULL';
397 BEGIN
398 IF wsh_debug_interface.g_Debug THEN
399 IF upper(x_Module) like g_Module AND ( g_DebugAll OR level_defined(x_Level) ) THEN
400 IF x_Value IS NULL THEN
401 v_Value := v_NullValue;
402 ELSIF x_Value THEN
403 v_Value := 'TRUE';
404 ELSE
405 v_Value := 'FALSE';
406 END IF;
407 write_output(make_space||x_Text||C_DELIMITER||v_Value);
408 END IF;
409 END IF;
410
411 EXCEPTION
412 WHEN OTHERS THEN
413 wsh_debug_interface.g_Debug := FALSE;
414 --raise;
415 END log;
416
417 /*===========================================================================
418 FUNCTION NAME: get_file_name
419
420 ===========================================================================*/
421 FUNCTION get_file_name
422 RETURN VARCHAR2
423 IS
424
425 v_file_name VARCHAR2(255);
426 v_suffix VARCHAR2(100);
427
428 BEGIN
429 IF WSH_DEBUG_INTERFACE.g_file IS NOT NULL
430 THEN
431 RETURN(WSH_DEBUG_INTERFACE.g_file);
432 END IF;
433 --
434 --
435 IF g_session_id is NULL THEN
439 fnd_profile.get('WSH_DEBUG_FILE_PREFIX',g_file_prefix);
436 g_session_id := userenv('SESSIONID');
437 END IF;
438 --
440 --
441 IF g_file_prefix IS NULL THEN
442 IF ( g_user_name is null ) THEN
443 g_user_name := lower(FND_GLOBAL.user_name);
444 END IF;
445 IF ( g_user_name is null ) THEN
446 g_user_name := 'dbuser:' || lower(USER);
447 END IF;
448 v_suffix := g_user_name || '_' || g_session_id;
449 v_file_name := C_PREFIX || '_' || v_suffix || C_SUFFIX;
450 RETURN v_file_name;
451 ELSE
452 v_file_name := g_file_prefix || '_' || g_session_id || C_SUFFIX;
453 RETURN v_file_name;
454 END IF;
455
456 EXCEPTION
457 WHEN OTHERS THEN
458 --IF utl_file.is_open(g_FileHandle) THEN
459 --utl_file.fclose(g_FileHandle);
460 --END IF;
461 wsh_debug_interface.g_Debug := FALSE;
462
463 END get_file_name;
464
465 /*===========================================================================
466 PROCEDURE NAME: start_dbg
467
468 ===========================================================================*/
469 PROCEDURE start_dbg( x_Module IN VARCHAR2 , p_otherApp_debug in boolean)
470 IS
471 v_DebugMode NUMBER;
472 v_Directory VARCHAR2(80);
473 v_Status NUMBER;
474 v_debug_enabled VARCHAR2(1);
475 v_otherapp_dir VARCHAR2(255);
476 v_otherapp_file VARCHAR2(60);
477 l_return_status VARCHAR2(1);
478 l_sql_string VARCHAR2(20000);
479 l_run_comment VARCHAR2(32767):=' ';
480 l_run_comment1 VARCHAR2(100):=' ';
481 l_newFile BOOLEAN := FALSE;
482 l_module VARCHAR2(32767);
483 --bug 5682690 - local variables added
484 l_chr_debug_enabled VARCHAR2(80);
485 l_chr_debug_enabled_code VARCHAR2(30):=fnd_profile.value('WSH_DEBUG_MODE');
486 l_chr_debug_level VARCHAR2(80);
487 l_chr_debug_level_code VARCHAR2(30):=fnd_profile.value('WSH_DEBUG_LEVEL');
488
489 BEGIN
490 IF NOT(g_debugger_initialized)
491 THEN
492 fnd_profile.get('WSH_DEBUG_MODULE',l_module);
493 g_Module := UPPER(l_module) || '%' ;
494 --
495 fnd_profile.get('WSH_DEBUG_LEVEL', g_level);
496 g_Profiler := fnd_api.to_boolean(fnd_profile.value ('WSH_PROFILER_ENABLED'));
497 --
498 fnd_profile.get('WSH_DEBUG_LOG_DIRECTORY',g_dir);
499 --
500 --
501 IF ( nvl(fnd_global.conc_request_id, -1) > 0 ) THEN
502 g_RunMode := 'CONC';
503 l_run_comment := 'l' || fnd_global.conc_request_id || '.req' ;
504 l_newFile := TRUE;
505 --dbg_file.log('set new file true');
506 g_dir := NVL(g_dir,'X');
507 ELSE
508 g_RunMode := 'ONLINE';
509 g_File := get_file_name;
510 l_run_comment := g_file;
511 END IF;
512
513 --bug 6215206: For ITM Asyn process even if its frm concurrent process,
514 --generate new debug log file for printing debug messages
515 if g_RunMode = 'CONC' and
516 WSH_DEBUG_SV.G_ITM_ASYN_PROC
517 then
518 g_RunMode := 'ONLINE';
519 g_File := get_file_name;
520 l_run_comment := g_file;
521 end if;
522 --End of fix for bug 6215206
523 --
524 --
525 --get_debug_levels(g_Level);
526 IF wsh_debug_interface.g_Debug AND level_defined(C_PERF_LEVEL) THEN
527 g_DebugAll := TRUE; -- so that we do not have to modify other procedures.
528 END IF;
529 --
530 --
531 l_newFile := FALSE;
532 --
533 IF ( nvl(g_File_bak,'!') <> nvl(g_File,'!')
534 OR
535 nvl(g_Dir_bak, '!') <> nvl(g_Dir,'!')
536 )
537 THEN
538 --dbg_file.log('new file name');
539 IF wsh_debug_interface.g_Debug THEN
540 IF g_RunMode <> 'CONC'
541 THEN
542 IF g_dir IS NOT NULL
543 THEN
544 IF utl_file.is_open(wsh_debug_interface.g_file_handle)
545 then
546 g_FileHandle := wsh_debug_interface.g_file_handle;
547 else
548 g_FileHandle := utl_file.fopen(g_Dir, g_File, 'a');
549 end if;
550 /*
551 --
552 -- Do not remove the following line
553 -- it is done as a workaround for a bug in utl_file.
554 -- if we open it once and same file is opened
555 -- by other program (e.g. OM/INV), it overwrites portion of the file
556 --
557 g_FileHandle := utl_file.fopen(g_Dir, g_File, 'a');
558 */
559
560 g_File_bak := g_File;
561 g_Dir_bak := g_Dir;
562 l_newFile := TRUE;
563 ELSE
564 wsh_debug_interface.g_debug := FALSE;
565 END IF;
566 END IF;
567 END IF;
568 END IF;
569 --
570 --
571 IF g_RunMode <> 'CONC'
572 AND g_dir IS NOT NULL
573 AND NOT(utl_file.is_open(g_FileHandle))
574 THEN
575 g_FileHandle := utl_file.fopen(g_Dir, g_File, 'a');
576 END IF;
577 --
578 --
579 IF g_Profiler THEN
580
581 l_run_comment1 := LOWER( NVL(FND_GLOBAL.user_name,USER) );
582 --
583 l_sql_string:= 'begin
584 dbms_profiler.start_profiler(run_comment =>:1,run_comment1 =>:2,run_number =>:3);
585 end;
586 ';
587 --
588 BEGIN
592 print_mesg( 'Profiler Run Number is ==> ' || g_run_id);
589 EXECUTE IMMEDIATE l_sql_string
590 USING l_run_comment,l_run_comment1,OUT g_run_id;
591
593 EXCEPTION
594 when others then
595 null;
596 END;
597 ELSE
598 g_run_id := NULL;
599 END IF;
600 --
601 --
602 IF g_dir IS NOT NULL
603 AND ( l_newFile OR p_otherApp_debug)
604 THEN
605 print_mesg('Starting WSH Debugger ==> ' || TO_CHAR(sysdate, 'MM/DD/YYYY HH:MI:SS PM') || ',Session ID='||userenv('sessionid') );
606 --
607 --bug 5682690 - printing wsh debug profiles
608
609 IF l_chr_debug_enabled_code IS NOT NULL THEN
610
611 SELECT meaning
612 INTO l_chr_debug_enabled
613 FROM fnd_lookup_values_vl
614 WHERE lookup_type = 'WSH_DEBUG_ENABLED'
615 AND lookup_code = l_chr_debug_enabled_code;
616
617 ELSE
618
619 l_chr_debug_enabled:=NULL;
620
621 END IF;
622
623 IF l_chr_debug_level_code IS NOT NULL THEN
624
625 SELECT meaning
626 INTO l_chr_debug_level
627 FROM fnd_lookup_values_vl
628 WHERE lookup_type = 'WSH_DEBUG_LEVELS'
629 AND lookup_code = l_chr_debug_level_code;
630
631 ELSE
632
633 l_chr_debug_level:=NULL;
634
635 END IF;
636
637 print_mesg('The following are the current Shipping related debug settings:');
638 print_mesg(' OM: Debug Level ==> '|| fnd_profile.value('ONT_DEBUG_LEVEL'));
639 print_mesg(' INV: Debug Level ==> '|| fnd_profile.value('INV_DEBUG_LEVEL'));
640 print_mesg(' WSH: Debug Enabled ==> '|| l_chr_debug_enabled);
641 print_mesg(' WSH: Debug File Prefix ==> '|| fnd_profile.value('WSH_DEBUG_FILE_PREFIX'));
642 print_mesg(' WSH: Debug Level ==> '|| l_chr_debug_level);
643 print_mesg(' WSH: Debug Log Directory ==> '|| fnd_profile.value('WSH_DEBUG_LOG_DIRECTORY'));
644 print_mesg(' WSH: Debug Module ==> '|| fnd_profile.value('WSH_DEBUG_MODULE'));
645 print_mesg(' ');
646 --
647 /*
648 IF ( nvl(g_RunMode,FND_API.G_MISS_CHAR) <> 'CONC' ) THEN
649 log(x_Module,'File Name',g_File,C_UNEXPEC_ERR_LEVEL);
650 END IF;
651 */
652 --
653 IF WSH_DEBUG_INTERFACE.g_file IS NULL
654 THEN
655 Start_Other_App_Debug(
656 p_application => 'OE' ,
657 x_debug_directory => v_otherapp_dir,
658 x_debug_file => v_otherapp_file,
659 x_return_status => l_return_status);
660 Start_Other_App_Debug(
661 p_application => 'INV' ,
662 x_debug_directory => v_otherapp_dir,
663 x_debug_file => v_otherapp_file,
664 x_return_status => l_return_status);
665 --
666 -- need to set new_file = true for conc. mode
667 --print_mesg('OE Debug File ==> ' || g_oe_dbg_file);
668 --print_mesg('INV Debug File ==> ' || g_inv_dbg_file);
669 END IF;
670 END IF;
671 g_Debugger_initialized := TRUE;
672 END IF;
673
674 EXCEPTION
675 WHEN OTHERS THEN
676 --IF utl_file.is_open(g_FileHandle) THEN
677 --utl_file.fclose(g_FileHandle);
678 --END IF;
679 --dbg_file.log('err in start_dbg:'||substrb(sqlerrm,1,200));
680 wsh_debug_interface.g_Debug := FALSE;
681
682 END start_dbg;
683
684 /*===========================================================================
685 PROCEDURE NAME: stop_dbg
686 ===========================================================================*/
687 PROCEDURE stop_dbg( x_Module IN VARCHAR2 , p_otherApp_debug in boolean )
688 IS
689 v_Status NUMBER;
690 l_return_status VARCHAR2(1);
691 v_debug_separator VARCHAR2(255) := '*****************************************************';
692 v_debug_summary VARCHAR2(255) := '************Summary of Shipping API Calls************';
693 l_sql_string VARCHAR2(20000);
694 BEGIN
695 --log(x_Module,'Stopping WSH Debugger',sysdate,C_UNEXPEC_ERR_LEVEL);
696 IF g_TimeStack.COUNT <> 0 THEN
697 print_mesg(v_debug_summary);
698 wsh_debug_sv.tdump;
699 print_mesg(v_debug_separator);
700 END IF;
701 IF g_run_id IS NOT NULL THEN
702
703 BEGIN
704 l_sql_string:= 'begin
705 dbms_profiler.flush_data;
706 dbms_profiler.stop_profiler;
707 end;
708 ';
709
710 EXECUTE IMMEDIATE l_sql_string;
711 EXCEPTION
712 when others then null;
713 END;
714
715 g_run_id := NULL;
716 END IF;
717 g_TimeStack.DELETE;
718 g_oe_dbg_file := NULL;
719 g_inv_dbg_file := NULL;
720
721 IF p_otherApp_debug
722 THEN
723 if utl_file.is_open(g_FileHandle)
724 then
725 --dbg_file.log('closing file');
726 utl_file.fclose(g_FileHandle);
727 --g_fileHandle := NULL;
728 end if;
729 END IF;
730 --
731 --
732 IF WSH_DEBUG_INTERFACE.g_file IS NULL
733 AND p_otherApp_Debug
734 THEN
735 stop_Other_App_Debug(
736 p_application => 'OE' ,
737 x_return_status => l_return_status);
738 stop_Other_App_Debug(
739 p_application => 'INV' ,
740 x_return_status => l_return_status);
741 END IF;
742 --
743 --
744 g_debugger_initialized := FALSE;
745 /*
749 utl_file.fclose(g_FileHandle);
746 wsh_debug_interface.g_Debug := FALSE;
747 g_DebugAll := FALSE;
748 IF utl_file.is_open(g_FileHandle) THEN
750 END IF;
751 */
752 EXCEPTION
753 WHEN OTHERS THEN
754 --dbg_file.log('err in stop_dbg:'||substrb(sqlerrm,1,200));
755 wsh_debug_interface.g_Debug := FALSE;
756 END stop_dbg;
757
758 /*===========================================================================
759 FUNCTION NAME: get_pkg_version
760
761 DESCRIPTION: This function returns the version of the package body
762
763 ===========================================================================*/
764
765 FUNCTION get_pkg_version(x_Package IN VARCHAR2)
766 RETURN VARCHAR2
767 IS
768 i NUMBER;
769 v_Version VARCHAR2(100);
770 v_Header VARCHAR2(32767);
771 BEGIN
772
773 IF nvl(x_Package, 'WSH') <> 'WSH' THEN
774 IF g_PkgStack.COUNT <> 0 THEN
775 FOR i IN 1..g_PkgStack.COUNT LOOP
776 IF x_Package = g_PkgStack(i) THEN
777 RETURN g_VersionStack(i);
778 END IF;
779 END LOOP;
780 END IF;
781 select text
782 into v_Header
783 from all_source
784 where name = x_Package
785 and owner = UPPER(USER)
786 and line = 2
787 and type ='PACKAGE BODY';
788 --and text like '%$Head%';
789 v_Header := ltrim(SUBSTRB(v_Header,INSTRB(v_Header,':',1,1)+1),' ');
790 v_Version := SUBSTRB(v_Header,1 ,INSTRB(v_Header, ' ',1,2) -1 );
791 g_VersionStack(g_VersionStack.COUNT +1) := v_Version;
792 g_PkgStack(g_PkgStack.COUNT +1) := x_Package;
793 RETURN v_Version;
794 ELSE
795 RETURN NULL;
796 END IF;
797
798 EXCEPTION
799 when others then
800 RETURN NULL;
801 END get_pkg_version;
802
803 /*===========================================================================
804
805 PROCEDURE NAME: push
806
807 ===========================================================================*/
808 PROCEDURE push(x_Module IN VARCHAR2)
809 IS
810 v_Name VARCHAR2(255);
811 v_Pkg VARCHAR2(80);
812 BEGIN
813 --dbg_file.log('x_module='||x_module);
814 --dbg_file.log('g_debugcount='||g_debugCount);
815 IF g_DebugCount = 0 THEN
816 --
817 wsh_debug_interface.g_Debug := is_debug_enabled;
818 --
819 --
820 IF wsh_debug_interface.g_debug
821 THEN
822 --dbg_file.log('wsh_debug_interface.g_debug is true');
823 start_dbg(x_Module,FALSE);
824 --ELSE
825 -- stop_dbg(x_Module,TRUE);
826 END IF;
827 --
828 END IF;
829 --
830 --
831 g_DebugCount := g_DebugCount + 1;
832 --
833 --
834 IF wsh_debug_interface.g_Debug THEN
835 --dbg_file.log('wsh_debug_interface.g_debug is true-1');
836 IF ( upper(x_Module) like g_Module ) THEN
837 IF g_DebugAll OR level_defined(C_PROC_LEVEL) THEN
838 v_Name := UPPER(SUBSTRB (x_Module,INSTRB(x_Module, '.',1,2) + 1));
839 v_Pkg := UPPER(SUBSTRB (v_Name,1,INSTRB(v_Name,'.',1,1)-1));
840 g_CallStack(g_CallStack.COUNT) := v_Name;
841 --dbg_file.log('calling tstart');
842 tstart(v_Name);
843 --dbg_file.log('calling write');
844 write_output(make_space(1)||'Entering '||v_Name|| ' ('||get_pkg_version(v_Pkg)||')'||' ('||TO_CHAR(sysdate,'MM/DD/YYYY HH:MI:SS PM')||')');
845 --dbg_file.log('after write');
846 END IF;
847 END IF;
848 END IF;
849 EXCEPTION
850 WHEN OTHERS THEN
851 --dbg_file.log('err in push:'||substrb(sqlerrm,1,200));
852 wsh_debug_interface.g_Debug := FALSE;
853 --raise;
854 END push;
855
856 /*===========================================================================
857
858 PROCEDURE NAME: pop
859
860 ===========================================================================*/
861 PROCEDURE pop(x_Module IN VARCHAR2, x_Context IN VARCHAR2 := NULL)
862 IS
863
864 v_Name VARCHAR2(255);
865 v_message VARCHAR2(32767);
866
867 BEGIN
868
869 g_DebugCount := g_DebugCount - 1;
870 --
871 IF wsh_debug_interface.g_Debug THEN
872 IF ( upper(x_Module) like g_Module ) THEN
873 IF g_DebugAll OR level_defined(C_PROC_LEVEL) THEN
874
875 v_Name := UPPER(SUBSTRB (x_Module,INSTRB(x_Module, '.',1,2) + 1));
876 --
877 v_message := make_space(1)
878 || 'Exiting '
879 || v_Name;
880 --
881 IF x_Context IS NOT NULL THEN
882 v_message := v_message
883 || ' - '
884 ||x_Context ;
885 END IF;
886 v_message := v_message
887 || ' ('
888 || TO_CHAR(sysdate,'MM/DD/YYYY HH:MI:SS PM')
889 || ', '
890 || tprint(v_Name)
891 || ')';
892 --
893 --
894 tstop(v_Name);
895 write_output(v_message);
896 --
897 IF ( g_callStack.count > 0 )
898 THEN
899 g_CallStack.DELETE(g_CallStack.COUNT-1);
900 END IF;
901 END IF;
902 END IF;
903 END IF;
904 --
905 IF g_DebugCount = 0 THEN
906 stop_dbg(x_Module, false);
907 END IF;
908
909 EXCEPTION
910 WHEN OTHERS THEN
911 --dbg_file.log('err in pop:'||substrb(sqlerrm,1,200));
912 wsh_debug_interface.g_Debug := FALSE;
913
914 END pop;
915
916 /*===========================================================================
917
918 PROCEDURE NAME: start_wsh_debugger
919
920 DESCRIPTION This procedure is used to turn on the Shipping Debugger by other
921 products
922
923 ============================================================================*/
924 --FUNCTION start_wsh_debugger ( x_Level IN NUMBER)
925 --RETURN VARCHAR2
926 PROCEDURE start_debugger
927 (
928 x_file_name OUT NOCOPY VARCHAR2,
929 x_return_status OUT NOCOPY VARCHAR2,
930 x_msg_count OUT NOCOPY NUMBER,
931 x_msg_data OUT NOCOPY VARCHAR2
932 )
933 IS
934 v_dir_separator VARCHAR2(1);
935 l_debug_file varchar2(32767);
936 BEGIN
937
938 fnd_profile.get('WSH_DEBUG_LOG_DIRECTORY',g_dir);
939 --
940 IF g_Dir IS NOT NULL THEN
941 fnd_profile.put('WSH_DEBUG_MODE','T');
942 --fnd_profile.put('WSH_DEBUG_MODULE','%');
943 --fnd_profile.put('WSH_DEBUG_LEVEL',to_char(x_Level));
944 IF (instrb(g_Dir,'/') > 0 ) THEN
945 v_dir_separator := '/';
946 ELSE
947 v_dir_separator := '\';
948 END IF;
949 --
950 --
951 wsh_debug_interface.g_debug := TRUE;
952 --
953 start_dbg('',TRUE);
954
955 l_Debug_File := g_Dir || v_dir_separator|| g_file; --get_file_name;
956 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
957 ELSE
958 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
959 FND_MESSAGE.SET_NAME('WSH','WSH_DEBUG_DIR_NULL_ERROR');
960 WSH_UTIL_CORE.ADD_MESSAGE(WSH_UTIL_CORE.G_RET_STS_ERROR);
961 END IF;
962 --
963 --
964 x_file_name := l_debug_file;
965 --
966 --
970 p_data => x_msg_data,
967 FND_MSG_PUB.Count_And_Get
968 (
969 p_count => x_msg_count,
971 p_encoded => FND_API.G_FALSE
972 );
973
974 EXCEPTION
975 WHEN OTHERS THEN
976
977 WSH_UTIL_CORE.default_handler(WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR);
978 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
979 FND_MSG_PUB.Count_And_Get
980 (
981 p_count => x_msg_count,
982 p_data => x_msg_data,
983 p_encoded => FND_API.G_FALSE
984 );
985 --RETURN(l_debug_file);
986 END start_debugger;
987
988
989 /*===========================================================================
990
991 PROCEDURE NAME: stop_wsh_debugger
992
993 DESCRIPTION This procedure is used to turn off the Shipping Debugger by other
994 products
995
996 ============================================================================*/
997 PROCEDURE stop_debugger
998 IS
999 v_dir_separator VARCHAR2(1);
1000 l_debug_file varchar2(32767);
1001 BEGIN
1002
1003 --IF NVL(wsh_debug_interface.g_debug,FALSE)
1004 --THEN
1005 --stop_dbg('', true);
1006 stop_dbg('', false);
1007 --END IF;
1008 --
1009 fnd_profile.put('WSH_DEBUG_MODE','F');
1010 --
1011 wsh_debug_interface.g_debug := FALSE;
1012
1013 EXCEPTION
1014 WHEN OTHERS THEN
1015 wsh_debug_interface.g_debug:= FALSE;
1016 END stop_debugger;
1017
1018
1019
1020 /*===========================================================================
1021 FUNCTION NAME: is_debug_enabled
1022
1023 DESCRIPTION: This function returns TRUE if debug is
1024 enabled.
1025
1026 ===========================================================================*/
1027
1028 FUNCTION is_debug_enabled RETURN BOOLEAN
1029 IS
1030
1031 v_debug_enabled varchar2(100);
1032
1033 BEGIN
1034
1035 IF wsh_debug_interface.g_debug IS NOT NULL
1036 THEN
1037 RETURN(wsh_debug_interface.g_debug);
1038 END IF;
1039 --
1040 fnd_profile.get('WSH_DEBUG_MODE',v_debug_enabled);
1041 IF nvl(v_debug_enabled,'!') = 'T' THEN
1042 wsh_debug_interface.g_debug := TRUE;
1043 RETURN TRUE;
1044 ELSIF nvl(v_debug_enabled,'!') = 'F' THEN
1045 wsh_debug_interface.g_debug := FALSE;
1046 RETURN FALSE;
1047 ELSIF to_number(v_debug_enabled) >= 0 THEN
1048 wsh_debug_interface.g_debug := TRUE;
1049 RETURN TRUE;
1050 ELSE
1051 wsh_debug_interface.g_debug := FALSE;
1052 RETURN FALSE;
1053 END IF;
1054 RETURN FALSE;
1055
1056 EXCEPTION
1057 when others then
1058 RETURN FALSE;
1059 END is_debug_enabled;
1060
1061
1062 /*===========================================================================
1063
1064 PROCEDURE Start_Other_App_Debug
1065
1066 ===========================================================================*/
1067
1068 PROCEDURE Start_Other_App_Debug(
1069 p_application IN VARCHAR2,
1070 x_debug_directory OUT NOCOPY VARCHAR2,
1071 x_debug_file OUT NOCOPY VARCHAR2,
1072 x_return_status OUT NOCOPY VARCHAR2)
1073 IS
1074
1075 v_inv_dbg_file varchar2(255);
1076 v_dir_separator varchar2(1);
1077 v_inv_trace_on number := 0;
1078 v_oe_dbg_level number := 0;
1079 v_return_flag boolean := FALSE;
1080 BEGIN
1081 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
1082 --
1083 --dbg_file.log('start other app debugger-app='||p_application||'dir='||g_dir||'file='||g_file);
1084 IF (p_application = 'OE') THEN
1085 oe_debug_pub.start_ont_debugger(g_dir, g_file, g_filehandle);
1086 ELSIF ( p_application = 'INV' ) THEN
1087 INV_DEBUG_INTERFACE.start_inv_debugger(g_dir, g_file, g_filehandle);
1088 END IF;
1089 --
1090 /*
1091 IF (p_application = 'OE') THEN
1092 FND_PROFILE.get('ONT_DEBUG_LEVEL',v_oe_dbg_level);
1093 IF nvl(v_oe_dbg_level, 0) = 0 THEN
1094 v_oe_dbg_level := 5;
1095 END IF;
1096 OE_DEBUG_PUB.G_DEBUG_LEVEL:= v_oe_dbg_level;
1097 FND_PROFILE.get('OE_DEBUG_LOG_DIRECTORY',x_debug_directory);
1098 IF x_debug_directory is null THEN
1099 x_debug_directory := g_Dir;
1100 fnd_profile.put('OE_DEBUG_LOG_DIRECTORY',g_Dir);
1101 END IF;
1102 x_debug_file := oe_debug_pub.Set_Debug_Mode('FILE');
1103 g_oe_dbg_file := x_debug_file;
1104 --log(g_Module,'OE Debug File',x_debug_file,C_STMT_LEVEL);
1105 ELSIF ( p_application = 'INV' ) THEN
1106 fnd_profile.get('INV_DEBUG_TRACE', v_inv_trace_on) ;
1107 fnd_profile.get('INV_DEBUG_FILE', v_inv_dbg_file) ;
1108 IF ( v_inv_trace_on IN (2,0) ) THEN
1109 fnd_profile.put('INV_DEBUG_TRACE','1');
1110 END IF;
1111 IF v_inv_dbg_file IS NULL THEN
1112 IF g_file_prefix IS NULL THEN
1113 v_inv_dbg_file := 'inv_' || substrb(g_File, 5);
1114 ELSE
1115 v_inv_dbg_file := 'inv_' || g_File;
1116 END IF;
1117 IF (instrb(g_Dir,'/') > 0 ) THEN
1118 v_dir_separator := '/';
1119 v_inv_dbg_file := g_Dir || v_dir_separator|| v_inv_dbg_file;
1120 ELSE
1121 v_dir_separator := '\';
1122 v_inv_dbg_file := g_Dir || v_dir_separator|| v_inv_dbg_file;
1123 END IF;
1124 END IF;
1125 fnd_profile.put('INV_DEBUG_FILE',v_inv_dbg_file);
1126 fnd_profile.put('INV_DEBUG_LEVEL',C_UNEXPEC_ERR_LEVEL);
1127 g_inv_dbg_file := v_inv_dbg_file;
1128 --log(g_Module,'INV Debug File',v_inv_dbg_file,C_STMT_LEVEL);
1129 END IF;
1130 */
1134 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
1131
1132 EXCEPTION
1133 WHEN Others THEN
1135
1136 END Start_Other_App_Debug;
1137 /*===========================================================================
1138
1139 PROCEDURE Stop_Other_App_Debug
1140
1141 ===========================================================================*/
1142 PROCEDURE Stop_Other_App_Debug(
1143 p_application IN VARCHAR2,
1144 x_return_status OUT NOCOPY VARCHAR2) IS
1145
1146 BEGIN
1147 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
1148 --
1149 IF (p_application = 'OE') THEN
1150 oe_debug_pub.stop_ont_debugger;
1151 ELSIF ( p_application = 'INV' ) THEN
1152 INV_DEBUG_INTERFACE.stop_inv_debugger;
1153 END IF;
1154 --
1155 /*
1156 IF (p_application = 'OE') THEN
1157 OE_DEBUG_PUB.DEBUG_OFF;
1158 END IF;
1159 */
1160
1161 EXCEPTION
1162 WHEN Others THEN
1163 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
1164 END Stop_Other_App_Debug;
1165
1166
1167 /********* The APIs below are maintained only for backward compatibility.
1168 These should not be called directly from any APIs. ****************/
1169
1170
1171 /*===========================================================================
1172
1173 PROCEDURE append_other_dbg_file
1174
1175 ===========================================================================*/
1176 PROCEDURE append_other_dbg_file( p_source_file_directory IN VARCHAR2,
1177 p_source_file_name IN VARCHAR2,
1178 p_target_file_directory IN VARCHAR2,
1179 p_target_file_name IN VARCHAR2,
1180 x_return_status OUT NOCOPY BOOLEAN)
1181 IS
1182 x_source_file utl_file.file_type;
1183 x_target_file utl_file.file_type;
1184 x_line VARCHAR2(512) := NULL;
1185 begin
1186 NULL;
1187 /*
1188 x_source_file := utl_file.fopen(p_source_file_directory, p_source_file_name, 'R');
1189 x_target_file := utl_file.fopen(p_target_file_directory, p_target_file_name, 'A');
1190 x_line := '******** Attaching the contents of other app debug ********';
1191 utl_file.put_line(x_target_file, x_line);
1192 x_line := 'Debug file =>' || p_source_file_name;
1193 utl_file.put_line(x_target_file, x_line);
1194 LOOP
1195 utl_file.get_line(x_source_file, x_line);
1196 utl_file.Put_line(x_target_file, x_line);
1197 END LOOP;
1198 utl_file.fclose(x_source_file);
1199 utl_file.fclose(x_target_file);
1200 x_return_status := TRUE;
1201 */
1202
1203 EXCEPTION
1204 WHEN utl_file.invalid_operation THEN
1205 utl_file.fclose(x_source_file);
1206 utl_file.fclose(x_target_file);
1207 x_return_status :=FALSE;
1208 WHEN utl_file.read_error THEN
1209 utl_file.fclose(x_source_file);
1210 utl_file.fclose(x_target_file);
1211 x_return_status :=FALSE;
1212 WHEN utl_file.invalid_mode THEN
1213 utl_file.fclose(x_source_file);
1214 utl_file.fclose(x_target_file);
1215 x_return_status :=FALSE;
1216 WHEN utl_file.invalid_filehandle THEN
1217 utl_file.fclose(x_source_file);
1218 utl_file.fclose(x_target_file);
1219 x_return_status :=FALSE;
1220 WHEN utl_file.internal_error THEN
1221 utl_file.fclose(x_source_file);
1222 utl_file.fclose(x_target_file);
1223 x_return_status :=FALSE;
1224 WHEN OTHERS THEN
1225 x_return_status :=FALSE;
1226 END append_other_dbg_file;
1227
1228 /*===========================================================================
1229 PROCEDURE NAME: tstart
1230
1231 ===========================================================================*/
1232 PROCEDURE tstart(x_Level IN NUMBER, x_Marker IN VARCHAR2)
1233 IS
1234
1235 v_Context VARCHAR2(100);
1236 v_Position NUMBER := 0;
1237
1238 BEGIN
1239
1240 IF wsh_debug_interface.g_Debug THEN
1241 IF g_DebugAll OR level_defined(x_Level) THEN
1242 FOR v_Count IN 1..g_TimeStack.COUNT LOOP
1243 IF g_TimeStack(v_Count).Marker = UPPER(x_Marker) THEN
1244 v_Position := v_Count;
1245 EXIT;
1246 END IF;
1247 END LOOP;
1248 IF v_Position = 0 THEN
1249 v_Position := g_TimeStack.COUNT + 1;
1250 g_TimeStack(v_Position).Marker := UPPER(x_Marker);
1251 g_TimeStack(v_Position).TotalTime := 0;
1252 g_TimeStack(v_Position).CallCount := 0;
1253 END IF;
1254 g_TimeStack(v_Position).Time := dbms_utility.get_time;
1255 g_TimeStack(v_Position).CallCount := g_TimeStack(v_Position).CallCount + 1
1256 ;
1257
1258 END IF;
1259 END IF;
1260
1261 EXCEPTION
1262 WHEN OTHERS THEN
1263 wsh_debug_interface.g_Debug := FALSE;
1264 --raise;
1265
1266 END tstart;
1267
1268
1269 /*===========================================================================
1270
1271 PROCEDURE NAME: tstop
1272
1273 ===========================================================================*/
1274 PROCEDURE tstop(x_Level IN NUMBER, x_Marker IN VARCHAR2)
1275 IS
1276
1277 v_Context VARCHAR2(100);
1278
1279 BEGIN
1280
1281 IF wsh_debug_interface.g_Debug THEN
1282 IF g_DebugAll OR level_defined(x_Level) THEN
1283 FOR v_Count IN 1..g_TimeStack.COUNT LOOP
1284 IF g_TimeStack(v_Count).Marker = UPPER(x_Marker) THEN
1288 EXIT;
1285 g_TimeStack(v_Count).TotalTime := g_TimeStack(v_Count).TotalTime +
1286 ((( dbms_utility.get_time -
1287 g_TimeStack(v_Count).Time)/100));
1289 END IF;
1290 END LOOP;
1291 END IF;
1292 END IF;
1293
1294 EXCEPTION
1295 WHEN OTHERS THEN
1296 wsh_debug_interface.g_Debug := FALSE;
1297 --raise;
1298
1299 END tstop;
1300
1301 /*===========================================================================
1302
1303 PROCEDURE NAME: tdump
1304
1305 ===========================================================================*/
1306 --PROCEDURE tdump(x_Level IN NUMBER, x_Context IN VARCHAR2 DEFAULT NULL)
1307 PROCEDURE tdump(x_Level IN NUMBER, x_Context IN VARCHAR2)
1308 IS
1309
1310
1311 BEGIN
1312
1313
1314 IF wsh_debug_interface.g_Debug THEN
1315 IF g_DebugAll OR level_defined(x_Level) THEN
1316 --write_output(make_space||'Time Dump ('||x_Context||')');
1317 FOR v_Count IN 1..g_TimeStack.COUNT LOOP
1318 write_output(make_space||g_TimeStack(v_Count).Marker||' : '||
1319 g_TimeStack(v_Count).CallCount||' calls : '||
1320 ROUND(g_TimeStack(v_Count).TotalTime,2)||' seconds');
1321 END LOOP;
1322 g_TimeStack.DELETE;
1323 END IF;
1324 END IF;
1325
1326 EXCEPTION
1327 WHEN OTHERS THEN
1328 wsh_debug_interface.g_Debug := FALSE;
1329 --raise;
1330 END tdump;
1331
1332
1333
1334 /*===========================================================================
1335
1336 PROCEDURE NAME: start_time
1337
1338 ===========================================================================*/
1339 PROCEDURE start_time(x_Level IN NUMBER, x_Marker IN VARCHAR2, x_Context IN VARCHAR2 := NULL)
1340
1341 IS
1342
1343 v_Context VARCHAR2(100);
1344 v_Position NUMBER := 0;
1345
1346 BEGIN
1347
1348 IF wsh_debug_interface.g_Debug THEN
1349 IF g_DebugAll OR level_defined(x_Level) THEN
1350 FOR v_Count IN 1..g_TimeStack.COUNT LOOP
1351 IF g_TimeStack(v_Count).Marker = UPPER(x_Marker) THEN
1352 v_Position := v_Count;
1353 EXIT;
1354 END IF;
1355 END LOOP;
1356 IF v_Position = 0 THEN
1357 v_Position := g_TimeStack.COUNT + 1;
1358 g_TimeStack(v_Position).Marker := UPPER(x_Marker);
1359 g_TimeStack(v_Position).TotalTime := 0;
1360 g_TimeStack(v_Position).CallCount := 0;
1361 END IF;
1362 g_TimeStack(v_Position).Time := dbms_utility.get_time;
1363 v_Context := x_Context;
1364 IF v_Context IS NOT NULL THEN
1365 v_Context := ': '||v_Context;
1366 END IF;
1367 write_output(make_space||'Start Timing ('||UPPER(x_Marker)||')'|| v_Context);
1368
1369 END IF;
1370 END IF;
1371
1372 EXCEPTION
1373 WHEN OTHERS THEN
1374 wsh_debug_interface.g_Debug := FALSE;
1375 --raise;
1376
1377 END start_time;
1378
1379
1380 /*===========================================================================
1381
1382 PROCEDURE NAME: start_time
1383
1384 ===========================================================================*/
1385 PROCEDURE start_time(x_Marker IN VARCHAR2, x_Context IN VARCHAR2 := NULL)
1386 IS
1387
1388 v_Context VARCHAR2(100);
1389 v_Position NUMBER := 0;
1390
1391 BEGIN
1392
1393 IF wsh_debug_interface.g_Debug THEN
1394 FOR v_Count IN 1..g_TimeStack.COUNT LOOP
1395 IF g_TimeStack(v_Count).Marker = UPPER(x_Marker) THEN
1396 v_Position := v_Count;
1397 EXIT;
1398 END IF;
1399 END LOOP;
1400 IF v_Position = 0 THEN
1401 v_Position := g_TimeStack.COUNT + 1;
1402 g_TimeStack(v_Position).Marker := UPPER(x_Marker);
1403 g_TimeStack(v_Position).TotalTime := 0;
1404 g_TimeStack(v_Position).CallCount := 0;
1405 END IF;
1406 g_TimeStack(v_Position).Time := dbms_utility.get_time;
1407 v_Context := x_Context;
1408 IF v_Context IS NOT NULL THEN
1409 v_Context := ': '||v_Context;
1410 END IF;
1411 write_output(make_space||'Start Timing ('||UPPER(x_Marker)||')'|| v_Context);
1412
1413 END IF;
1414
1415 EXCEPTION
1416 WHEN OTHERS THEN
1417 wsh_debug_interface.g_Debug := FALSE;
1418 --raise;
1419
1420 END start_time;
1421
1422
1423 /*===========================================================================
1424
1425 PROCEDURE NAME: stop_time
1426
1427 ===========================================================================*/
1428 PROCEDURE stop_time(x_Level IN NUMBER, x_Marker IN VARCHAR2, x_Context IN VARCHAR2 := NULL)
1429
1430 IS
1431
1432 v_Context VARCHAR2(100);
1433
1434 BEGIN
1435
1436 IF wsh_debug_interface.g_Debug THEN
1437 IF g_DebugAll OR level_defined(x_Level) THEN
1438 FOR v_Count IN 1..g_TimeStack.COUNT LOOP
1439 IF g_TimeStack(v_Count).Marker = UPPER(x_Marker) THEN
1440 v_Context := x_Context;
1441 IF v_Context IS NULL THEN
1442 v_Context := C_DELIMITER;
1443 ELSE
1444 v_Context := ': '||v_Context ||C_DELIMITER;
1445 END IF;
1446 write_output(make_space||'End Timing ('||UPPER(x_Marker)||')'|| v_Context ||
1447 ((dbms_utility.get_time - g_TimeStack(v_Count).Time)/100) ||' seconds');
1448
1452 END LOOP;
1449 -- g_TimeStack.DELETE(v_Count);
1450 EXIT;
1451 END IF;
1453 END IF;
1454 END IF;
1455
1456 EXCEPTION
1457 WHEN OTHERS THEN
1458 wsh_debug_interface.g_Debug := FALSE;
1459 --raise;
1460
1461 END stop_time;
1462
1463
1464 /*===========================================================================
1465
1466 PROCEDURE NAME: stop_time
1467
1468 ===========================================================================*/
1469 PROCEDURE stop_time(x_Marker IN VARCHAR2, x_Context IN VARCHAR2 := NULL)
1470 IS
1471
1472 v_Context VARCHAR2(100);
1473
1474 BEGIN
1475
1476 IF wsh_debug_interface.g_Debug THEN
1477 FOR v_Count IN 1..g_TimeStack.COUNT LOOP
1478 IF g_TimeStack(v_Count).Marker = UPPER(x_Marker) THEN
1479 v_Context := x_Context;
1480 IF v_Context IS NULL THEN
1481 v_Context := C_DELIMITER;
1482 ELSE
1483 v_Context := ': '||v_Context ||C_DELIMITER;
1484 END IF;
1485 write_output(make_space||'End Timing ('||UPPER(x_Marker)||')'|| v_Context ||
1486 ((dbms_utility.get_time - g_TimeStack(v_Count).Time)/100)||' seconds');
1487
1488 -- g_TimeStack.DELETE(v_Count);
1489 EXIT;
1490 END IF;
1491 END LOOP;
1492 END IF;
1493
1494 EXCEPTION
1495 WHEN OTHERS THEN
1496 wsh_debug_interface.g_Debug := FALSE;
1497 --raise;
1498
1499 END stop_time;
1500
1501 /*=========================================================================
1502
1503 FUNCTION NAME: get_lookup_meaning
1504
1505 ===========================================================================*/
1506
1507 FUNCTION get_lookup_meaning (x_lookup_type IN VARCHAR2,
1508 x_lookup_code IN VARCHAR2)
1509 RETURN VARCHAR2
1510 IS
1511
1512 x_progress VARCHAR2(3) := '010';
1513
1514 CURSOR c IS
1515 SELECT meaning
1516 FROM fnd_lookups
1517 WHERE lookup_type = x_lookup_type AND
1518 lookup_code = x_lookup_code;
1519 --
1520 x_meaning fnd_lookups.meaning%TYPE;
1521 --
1522 BEGIN
1523 --
1524 OPEN c;
1525 --
1526 FETCH c INTO x_meaning;
1527 --
1528 RETURN x_meaning;
1529 --
1530 EXCEPTION
1531 WHEN OTHERS THEN
1532 RAISE;
1533
1534 END get_lookup_meaning;
1535
1536 /*===========================================================================
1537
1538 PROCEDURE NAME: debug
1539
1540 ===========================================================================*/
1541 PROCEDURE debug (x_message IN VARCHAR2)
1542 IS
1543
1544 BEGIN
1545 IF (g_debug_flag) THEN
1546 -- dbms_output.put_line (substr(x_message,1,255));
1547 NULL;
1548
1549 END IF;
1550
1551 END debug;
1552
1553
1554 /*===========================================================================
1555
1556 PROCEDURE NAME: disable_debug
1557
1558 ===========================================================================*/
1559 PROCEDURE disable_debug
1560 IS
1561
1562 BEGIN
1563
1564 g_debug_flag := FALSE;
1565
1566 END disable_debug;
1567
1568
1569 /*===========================================================================
1570
1571 FUNCTION NAME: debug_enabled
1572
1573 ===========================================================================*/
1574 FUNCTION debug_enabled
1575 RETURN BOOLEAN
1576 IS
1577
1578 BEGIN
1579
1580 return(g_debug_flag);
1581
1582 END debug_enabled;
1583
1584
1585 /*===========================================================================
1586
1587 PROCEDURE NAME: enable_debug
1588
1589 ===========================================================================*/
1590 PROCEDURE enable_debug
1591 IS
1592
1593 BEGIN
1594
1595 g_debug_flag := TRUE;
1596
1597 END enable_debug;
1598
1599 /*===========================================================================
1600
1601 PROCEDURE NAME: get_debug_levels
1602
1603 ===========================================================================*/
1604 PROCEDURE get_debug_levels(x_Topper IN NUMBER)
1605 IS
1606
1607 BEGIN
1608
1609 /*
1610 FOR i IN 0..g_MaxLevels LOOP
1611 IF POWER(2,i) > x_Topper THEN
1612 g_DebugLevels(g_DebugLevels.COUNT) := POWER(2,i-1);
1613 get_debug_levels(x_Topper - POWER(2,i-1));
1614 EXIT;
1615 ELSIF POWER(2,i) = x_Topper THEN
1616 g_DebugLevels(g_DebugLevels.COUNT) := POWER(2,i);
1617 EXIT;
1618 END IF;
1619 END LOOP;
1620 */
1621 NULL;
1622
1623 END get_debug_levels;
1624
1625 /*===========================================================================
1626
1627 PROCEDURE NAME: print_debug_stuff
1628
1629 ===========================================================================*/
1630 PROCEDURE print_debug_stuff
1631 IS
1632
1633 BEGIN
1634
1635 FOR i IN 0..g_DebugLevels.COUNT - 1 LOOP
1636 -- dbms_output.put_line('LEVEL '||i||' = '||g_DebugLevels(i));
1637 NULL;
1638 END LOOP;
1639
1640 END print_debug_stuff;
1641
1645 Just a Stub procedure to keep some of the WSH Packages Valid.
1642 /*===========================================================================
1643
1644 PROCEDURE NAME: start_debug
1646 ===========================================================================*/
1647 PROCEDURE start_debug(file_number VARCHAR2)
1648 IS
1649 BEGIN
1650 NULL;
1651 END start_debug;
1652
1653 /*===========================================================================
1654 PROCEDURE NAME: stop_debug
1655 Just a Stub procedure to keep some of the WSH Packages Valid.
1656 ===========================================================================*/
1657 PROCEDURE stop_debug
1658 IS
1659 BEGIN
1660 NULL;
1661 END stop_debug;
1662
1663 /*===========================================================================
1664
1665 PROCEDURE NAME: dlog - string
1666
1667 ===========================================================================*/
1668 PROCEDURE dlog(x_Level IN NUMBER, x_Text IN VARCHAR2, x_Value IN VARCHAR2 := NULL)
1669 IS
1670
1671
1672 BEGIN
1673
1674 log(g_Module,x_Text, x_Value,x_Level);
1675 /*
1676 IF wsh_debug_interface.g_Debug THEN
1677 IF g_DebugAll OR level_defined(x_Level) THEN
1678 IF x_Value IS NULL THEN
1679 write_output(make_space||x_Text);
1680 ELSE
1681 write_output(make_space||x_Text||C_DELIMITER||x_Value);
1682 END IF;
1683 END IF;
1684 END IF;
1685 */
1686
1687 EXCEPTION
1688 WHEN OTHERS THEN
1689 wsh_debug_interface.g_Debug := FALSE;
1690 END dlog;
1691
1692
1693 /*===========================================================================
1694
1695 PROCEDURE NAME: dlog - number
1696
1697 ===========================================================================*/
1698 PROCEDURE dlog(x_Level IN NUMBER, x_Text IN VARCHAR2, x_Value IN NUMBER)
1699 IS
1700
1701
1702 BEGIN
1703
1704 log(g_Module,x_Text, x_Value,x_Level);
1705 /*
1706 IF wsh_debug_interface.g_Debug THEN
1707 IF g_DebugAll OR level_defined(x_Level) THEN
1708 write_output(make_space||x_Text||C_DELIMITER||x_Value);
1709 END IF;
1710 END IF;
1711 */
1712
1713 EXCEPTION
1714 WHEN OTHERS THEN
1715 wsh_debug_interface.g_Debug := FALSE;
1716
1717 END dlog;
1718
1719
1720 /*===========================================================================
1721
1722 PROCEDURE NAME: dlog - boolean
1723
1724 ===========================================================================*/
1725 PROCEDURE dlog(x_Level IN NUMBER, x_Text IN VARCHAR2, x_Value IN BOOLEAN)
1726 IS
1727
1728 v_Temp VARCHAR2(5);
1729
1730 BEGIN
1731
1732 log(g_Module,x_Text, x_Value,x_Level);
1733 /*
1734 IF wsh_debug_interface.g_Debug THEN
1735 IF g_DebugAll OR level_defined(x_Level) THEN
1736 IF x_Value THEN
1737 v_Temp := 'TRUE';
1738 ELSIF NOT x_Value THEN
1739 v_Temp := 'FALSE';
1740 END IF;
1741 write_output(make_space||x_Text||C_DELIMITER||v_Temp);
1742 END IF;
1743 END IF;
1744 */
1745
1746 EXCEPTION
1747 WHEN OTHERS THEN
1748 wsh_debug_interface.g_Debug := FALSE;
1749
1750 END dlog;
1751
1752
1753 /*===========================================================================
1754
1755 PROCEDURE NAME: dlog - date
1756
1757 ===========================================================================*/
1758 PROCEDURE dlog(x_Level IN NUMBER, x_Text IN VARCHAR2, x_Value IN DATE,
1759 x_Mask IN VARCHAR2 := 'DD-MON-YYYY HH:MI:SS PM')
1760 IS
1761
1762
1763 BEGIN
1764
1765 log(g_Module,x_Text, x_Value,x_Level);
1766 /*
1767 IF wsh_debug_interface.g_Debug THEN
1768 IF g_DebugAll OR level_defined(x_Level) THEN
1769 write_output(make_space||x_Text||C_DELIMITER||TO_CHAR(x_Value, x_Mask));
1770 END IF;
1771 END IF;
1772 */
1773
1774 EXCEPTION
1775 WHEN OTHERS THEN
1776 wsh_debug_interface.g_Debug := FALSE;
1777
1778 END dlog;
1779
1780
1781 /*===========================================================================
1782
1783 PROCEDURE NAME: dlog - string
1784
1785 ===========================================================================*/
1786 PROCEDURE dlog(x_Text IN VARCHAR2, x_Value IN VARCHAR2 := NULL)
1787 IS
1788
1789
1790 BEGIN
1791
1792 log(g_Module,x_Text, x_Value);
1793 /*
1794 IF wsh_debug_interface.g_Debug THEN
1795 IF x_Value IS NULL THEN
1796 write_output(make_space||x_Text);
1797 ELSE
1798 write_output(make_space||x_Text||C_DELIMITER||x_Value);
1799 END IF;
1800 END IF;
1801 */
1802
1803 EXCEPTION
1804 WHEN OTHERS THEN
1805 wsh_debug_interface.g_Debug := FALSE;
1806
1807 END dlog;
1808
1809
1810 /*===========================================================================
1811
1812 PROCEDURE NAME: dlog - number
1813
1814 ===========================================================================*/
1815 PROCEDURE dlog(x_Text IN VARCHAR2, x_Value IN NUMBER)
1816 IS
1817
1818
1819 BEGIN
1820
1821 log(g_Module,x_Text, x_Value);
1822 /*
1823 IF wsh_debug_interface.g_Debug THEN
1827
1824 write_output(make_space||x_Text||C_DELIMITER||x_Value);
1825 END IF;
1826 */
1828 EXCEPTION
1829 WHEN OTHERS THEN
1830 wsh_debug_interface.g_Debug := FALSE;
1831
1832 END dlog;
1833
1834
1835 /*===========================================================================
1836
1837 PROCEDURE NAME: dlog - boolean
1838
1839 ===========================================================================*/
1840 PROCEDURE dlog(x_Text IN VARCHAR2, x_Value IN BOOLEAN)
1841 IS
1842
1843 v_Temp VARCHAR2(5);
1844
1845 BEGIN
1846
1847 log(g_Module,x_Text, x_Value);
1848 /*
1849 IF wsh_debug_interface.g_Debug THEN
1850 IF x_Value THEN
1851 v_Temp := 'TRUE';
1852 ELSIF NOT x_Value THEN
1853 v_Temp := 'FALSE';
1854 END IF;
1855 write_output(make_space||x_Text||C_DELIMITER||v_Temp);
1856 END IF;
1857 */
1858
1859 EXCEPTION
1860 WHEN OTHERS THEN
1861 wsh_debug_interface.g_Debug := FALSE;
1862
1863 END dlog;
1864
1865
1866 /*===========================================================================
1867
1868 PROCEDURE NAME: dlog - date
1869
1870 ===========================================================================*/
1871 PROCEDURE dlog(x_Text IN VARCHAR2, x_Value IN DATE,
1872 x_Mask IN VARCHAR2 := 'DD-MON-YYYY HH:MI:SS PM')
1873 IS
1874
1875
1876 BEGIN
1877
1878 log(g_Module,x_Text, x_Value);
1879 /*
1880 IF wsh_debug_interface.g_Debug THEN
1881 write_output(make_space||x_Text||C_DELIMITER||TO_CHAR(x_Value, x_Mask));
1882 END IF;
1883 */
1884
1885 EXCEPTION
1886 WHEN OTHERS THEN
1887 wsh_debug_interface.g_Debug := FALSE;
1888
1889 END dlog;
1890
1891 /*===========================================================================
1892
1893 PROCEDURE NAME: dlogd - date, as a component of a table of records
1894
1895 ===========================================================================*/
1896 PROCEDURE dlogd(x_Level IN NUMBER, x_Text1 IN VARCHAR2 :=NULL , x_Index IN NUMBER := NULL,
1897
1898 x_Text2 IN VARCHAR2 := NULL, x_Value IN DATE := NULL)
1899 IS
1900
1901
1902 BEGIN
1903
1904 IF wsh_debug_interface.g_Debug THEN
1905 IF g_DebugAll OR level_defined(x_Level) THEN
1906 IF (x_Index IS NULL) AND (x_Text2 IS NULL) AND
1907 (x_Value IS NULL) THEN
1908 write_output(make_space||x_Text1);
1909 ELSE
1910 write_output(make_space||x_Text1||'('||x_Index||')'||x_Text2||C_DELIMITER||x_Value);
1911
1912 END IF;
1913 END IF;
1914 END IF;
1915
1916 EXCEPTION
1917 WHEN OTHERS THEN
1918 wsh_debug_interface.g_Debug := FALSE;
1919
1920 END dlogd;
1921
1922 /*===========================================================================
1923
1924 PROCEDURE NAME: dlogn - number, as a component of a table of records
1925
1926 ===========================================================================*/
1927 PROCEDURE dlogn(x_Level IN NUMBER, x_Text1 IN VARCHAR2 :=NULL , x_Index IN NUMBER := NULL,
1928
1929 x_Text2 IN VARCHAR2 := NULL, x_Value IN NUMBER := NULL)
1930 IS
1931
1932
1933 BEGIN
1934
1935 IF wsh_debug_interface.g_Debug THEN
1936 IF g_DebugAll OR level_defined(x_Level) THEN
1937 IF (x_Index IS NULL) AND (x_Text2 IS NULL) AND
1938 (x_Value IS NULL) THEN
1939 write_output(make_space||x_Text1);
1940 ELSE
1941 write_output(make_space||x_Text1||'('||x_Index||')'||x_Text2||C_DELIMITER||x_Value);
1942
1943 END IF;
1944 END IF;
1945 END IF;
1946
1947 EXCEPTION
1948 WHEN OTHERS THEN
1949 raise;
1950
1951 END dlogn;
1952
1953
1954
1955
1956
1957
1958 PROCEDURE push(x_Module IN VARCHAR2, x_name in varchar2)
1959 IS
1960 BEGIN
1961 push(x_Module); -- for backward compatibility.
1962 EXCEPTION
1963 WHEN OTHERS THEN
1964 wsh_debug_interface.g_Debug := FALSE;
1965 END push;
1966
1967 /*===========================================================================
1968
1969 PROCEDURE NAME: dpush
1970
1971 ===========================================================================*/
1972 PROCEDURE dpush(x_Level IN NUMBER, x_Name IN VARCHAR2)
1973 IS
1974 v_DebugMode NUMBER;
1975 v_Module VARCHAR2(32767) := 'WSH.plsql.wsh.' || x_Name;
1976 BEGIN
1977 push(v_Module); -- for backward compatibility.
1978 EXCEPTION
1979 WHEN OTHERS THEN
1980 wsh_debug_interface.g_Debug := FALSE;
1981 END dpush;
1982
1983 /*===========================================================================
1984 PROCEDURE NAME: dpush -- Obsoleted
1985
1986 ===========================================================================*/
1987 /*
1988 PROCEDURE dpush(x_Name IN VARCHAR2)
1989 IS
1990 BEGIN
1991 IF wsh_debug_interface.g_Debug THEN
1992 g_CallStack(g_CallStack.COUNT) := UPPER(x_Name);
1993 tstart(x_Name);
1994 write_output(make_space(1)||'Entering '||UPPER(x_Name)||' ('||TO_CHAR(sysdate,'MM/DD/YYYY HH24:MI')||')');
1995
1996 END IF;
1997
1998 EXCEPTION
1999 WHEN OTHERS THEN
2000 raise;
2001
2002 END dpush;
2003
2004 */
2005
2006 /*===========================================================================
2007 PROCEDURE NAME: dpop
2008
2009 ===========================================================================*/
2010 PROCEDURE dpop(x_Level IN NUMBER, x_Context IN VARCHAR2 := NULL)
2011 IS
2012 v_Module VARCHAR2(32767) := 'WSH.plsql.';
2013
2014 BEGIN
2015
2016 IF g_callStack.count > 0 THEN
2017 v_module := v_module || g_callStack(g_callStack.count-1);
2018 END IF;
2019
2020 pop(v_Module,x_Context); -- for backward compatibility.
2021 /*
2022 IF wsh_debug_interface.g_Debug THEN
2023 IF g_DebugAll OR level_defined(x_Level) THEN
2024 IF x_Context IS NOT NULL THEN
2025 write_output(make_space(1)||'Exiting '||g_CallStack(g_CallStack.COUNT-1) ||' - '||x_Context
2026 ||' ('||tprint(g_CallStack(g_CallStack.COUNT-1))||')');
2027 ELSE
2028 write_output(make_space(1)||'Exiting '||g_CallStack(g_CallStack.COUNT-1)||
2029 ' ('||tprint(g_CallStack(g_CallStack.COUNT-1))||')');
2030 END IF;
2031 tstop(g_CallStack(g_CallStack.COUNT-1));
2032 g_CallStack.DELETE(g_CallStack.COUNT-1);
2033 END IF;
2034 END IF;
2035 */
2036 EXCEPTION
2037 WHEN OTHERS THEN
2038 wsh_debug_interface.g_Debug := FALSE;
2039 END dpop;
2040
2041 /*===========================================================================
2042 PROCEDURE NAME: dpop
2043 PROCEDURE dpop(x_Context IN VARCHAR2 := NULL)
2044 IS
2045 BEGIN
2046 IF wsh_debug_interface.g_Debug THEN
2047 IF x_Context IS NOT NULL THEN
2048 write_output(make_space(1)||'Exiting '||g_CallStack(g_CallStack.COUNT-1)||
2049 ' - '||x_Context
2050 ||' ('||tprint(g_CallStack(g_CallStack.COUNT-1))||')');
2051 ELSE
2052 write_output(make_space(1)||'Exiting '||g_CallStack(g_CallStack.COUNT-1)||
2053 ' ('||tprint(g_CallStack(g_CallStack.COUNT-1))||')');
2054 END IF;
2055 tstop(g_CallStack(g_CallStack.COUNT-1));
2056 g_CallStack.DELETE(g_CallStack.COUNT-1);
2057 END IF;
2058
2059 EXCEPTION
2060 WHEN OTHERS THEN
2061 raise;
2062 END dpop;
2063 ===========================================================================*/
2064
2065 /********* The API set_debug_count is created for bug 6215206 for ITM Async process.
2066 This api should not be called directly from any other APIs. ****************/
2067 PROCEDURE set_debug_count
2068 IS
2069 BEGIN
2070 g_DebugCount := 0;
2071 g_Debugger_initialized := FALSE;
2072 END set_debug_count;
2073
2074 END wsh_debug_sv;