DBA Data[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;