1 PACKAGE BODY inv_pp_debug AS
2 /* $Header: INVPPDGB.pls 120.1 2005/06/07 18:40:08 appldev $ */
3 g_debug_mode NUMBER := g_debug_mode_no;
4 g_last_dynamic_sql long := NULL ;
5 g_last_error_pos NUMBER := -1;
6 g_last_error_msg long := NULL;
7 g_pipename VARCHAR2(1000) := NULL;
8 g_line_feed VARCHAR2(1) :='
9 ';
10 PROCEDURE set_debug_mode(p_mode IN NUMBER) IS
11 BEGIN
12 IF p_mode IN (g_debug_mode_yes, g_debug_mode_no) THEN
13 g_debug_mode := p_mode;
14 END IF;
15 END set_debug_mode;
16 --
17 FUNCTION IS_debug_mode RETURN BOOLEAN IS
18 BEGIN
19 RETURN (g_debug_mode = g_debug_mode_yes);
20 END is_debug_mode;
21 --
22 PROCEDURE set_last_dynamic_sql(p_sql IN long) IS
23 BEGIN
24 g_last_dynamic_sql := p_sql;
25 END set_last_dynamic_sql;
26 --
27 FUNCTION get_last_dynamic_sql RETURN long IS
28 BEGIN
29 RETURN g_last_dynamic_sql;
30 END get_last_dynamic_sql;
31 --
32 PROCEDURE set_last_error_message(p_error_msg IN long) IS
33 BEGIN
34 g_last_error_msg := p_error_msg;
35 END set_last_error_message;
36 --
37 FUNCTION get_last_error_message RETURN long IS
38 BEGIN
39 RETURN g_last_error_msg;
40 END get_last_error_message;
41 --
42 PROCEDURE set_last_error_position(p_error_pos IN NUMBER) IS
43 BEGIN
44 g_last_error_pos := p_error_pos;
45 END set_last_error_position;
46 --
47 FUNCTION get_last_error_position RETURN NUMBER IS
48 BEGIN
49 RETURN g_last_error_pos;
50 END get_last_error_position;
51 --
52 PROCEDURE set_debug_pipe_name(p_pipename IN VARCHAR2) IS
53 BEGIN
54 g_pipename := p_pipename;
55 END set_debug_pipe_name;
56 --
57 PROCEDURE send_message_to_pipe(p_message IN VARCHAR2) IS
58 l_rval NUMBER;
59 BEGIN
60 IF g_debug_mode <> g_debug_mode_yes OR
61 g_pipename IS NULL THEN
62 RETURN;
63 END IF;
64 -- bug # 3133781
65 /*
66 dbms_pipe.pack_message(p_message||g_line_feed);
67 l_rval := dbms_pipe.send_message(g_pipename, 120, 10000000);
68 dbms_pipe.pack_message('.'); -- message ending symbol
69 l_rval := dbms_pipe.send_message(g_pipename, 120, 10000000);
70 */
71 RETURN;
72 END send_message_to_pipe;
73 --
74 PROCEDURE send_long_to_pipe(p_message IN long ) IS
75 p_n NUMBER;
76 p_v VARCHAR2(1);
77 l_buf VARCHAR2(4096);
78 l_line_size INTEGER;
79 BEGIN
80 IF g_debug_mode <> g_debug_mode_yes OR
81 g_pipename IS NULL THEN
82 RETURN;
83 END IF;
84 l_line_size := 0;
85 FOR p_n IN 1..LENGTH(p_message) LOOP
86 p_v := Substr(p_message,p_n,1);
87 l_line_size := l_line_size +1;
88 if (p_v = g_line_feed OR l_line_size > 250)
89 AND l_buf IS NOT NULL THEN
90 send_message_to_pipe(l_buf);
91 l_buf := NULL;
92 l_line_size := 0;
93 ELSE
94 IF l_buf IS NULL THEN
95 l_buf := p_v;
96 ELSE
97 l_buf := l_buf || p_v;
98 END IF;
99 END IF;
100 END LOOP;
101 IF l_buf IS NOT NULL THEN
102 send_message_to_pipe(l_buf);
103 END IF;
104 END send_long_to_pipe;
105 PROCEDURE send_last_dynamic_sql IS
106 BEGIN
107 IF g_debug_mode <> g_debug_mode_yes OR
108 g_pipename IS NULL THEN
109 RETURN;
110 END IF;
111 send_message_to_pipe('last dynamic sql is ');
112 send_long_to_pipe(g_last_dynamic_sql);
113 END send_last_dynamic_sql;
114 PROCEDURE send_last_error_position IS
115 BEGIN
116 IF g_debug_mode <> g_debug_mode_yes OR
117 g_pipename IS NULL THEN
118 RETURN;
119 END IF;
120 send_message_to_pipe('last error position is '||g_last_error_pos);
121 END send_last_error_position;
122 PROCEDURE send_last_error_message IS
123 BEGIN
124 IF g_debug_mode <> g_debug_mode_yes OR
125 g_pipename IS NULL THEN
126 RETURN;
127 END IF;
128 send_message_to_pipe('last error message is '||g_last_error_msg);
129 END send_last_error_message;
130 --
131 FUNCTION receive
132 ( p_pipename IN VARCHAR2
133 , x_message OUT NOCOPY VARCHAR2
134 ) RETURN NUMBER IS
135 l_rval NUMBER := NULL;
136 BEGIN
137 l_rval := dbms_pipe.receive_message(p_pipename, 30);
138 IF l_rval = 0 THEN
139 dbms_pipe.unpack_message(x_message);
140 ELSE
141 x_message := NULL;
142 END IF;
143 --dbms_output.put_line('l_rval '|| l_rval);
144 RETURN l_rval;
145 END receive;
146 END inv_pp_debug;