git-svn-id: http://locode01.ad.dom/svn/WEBMIP/trunk@50874 248e525c-4dfb-0310-94bc-949c084e9493
This commit is contained in:
304
Data/BulkLoad/EFT/Nominations/plsql/caco_debug.bdy
Normal file
304
Data/BulkLoad/EFT/Nominations/plsql/caco_debug.bdy
Normal file
@@ -0,0 +1,304 @@
|
||||
CREATE OR REPLACE PACKAGE BODY caco_debug IS
|
||||
/*
|
||||
* $Header: /Isle Of Grain/Database/PLSQL/caco_debug.pck 3 8/04/05 11:06 Hardya $
|
||||
* $Revision: 3 $
|
||||
*
|
||||
* $History: caco_debug.pck $
|
||||
*
|
||||
* ***************** Version 3 *****************
|
||||
* User: Hardya Date: 8/04/05 Time: 11:06
|
||||
* Updated in $/Isle Of Grain/Database/PLSQL
|
||||
* Add function about to package specification.
|
||||
*
|
||||
* ***************** Version 2 *****************
|
||||
* User: Hardya Date: 18/03/05 Time: 11:24
|
||||
* Updated in $/Isle Of Grain/Database/PLSQL
|
||||
* Added use of debug_options table. Added procedures to allow invocation
|
||||
* from web.
|
||||
*
|
||||
* ***************** Version 1 *****************
|
||||
* User: Gilberta Date: 7/01/05 Time: 12:54
|
||||
* Created in $/Isle Of Grain/database/PLSQL
|
||||
* Initial Version
|
||||
*
|
||||
* ***************** Version 1 *****************
|
||||
* User: Hardya Date: 18/09/01 Time: 15:32
|
||||
* Created in $/Database/Packages/Debug
|
||||
* Routine to write debugging messages to the DEBUG table.
|
||||
*/
|
||||
g_debugging BOOLEAN DEFAULT FALSE;
|
||||
|
||||
PROCEDURE debug_on(p_package_name IN VARCHAR2 DEFAULT NULL) IS
|
||||
BEGIN
|
||||
g_debugging := TRUE;
|
||||
END;
|
||||
|
||||
PROCEDURE debug_off IS
|
||||
BEGIN
|
||||
g_debugging := FALSE;
|
||||
END;
|
||||
|
||||
FUNCTION debugging RETURN BOOLEAN IS
|
||||
BEGIN
|
||||
RETURN g_debugging;
|
||||
END;
|
||||
|
||||
PROCEDURE who_called_me(p_owner OUT VARCHAR2
|
||||
,p_name OUT VARCHAR2
|
||||
,p_lineno OUT NUMBER
|
||||
,p_caller_type OUT VARCHAR2) AS
|
||||
v_call_stack VARCHAR2(4096) DEFAULT dbms_utility.format_call_stack;
|
||||
n NUMBER;
|
||||
v_found_stack BOOLEAN DEFAULT FALSE;
|
||||
v_line VARCHAR2(255);
|
||||
v_count NUMBER := 0;
|
||||
l_handle VARCHAR2(20);
|
||||
l_linenum NUMBER;
|
||||
BEGIN
|
||||
--
|
||||
LOOP
|
||||
n := instr(v_call_stack
|
||||
,chr(10));
|
||||
EXIT WHEN(v_count = 3 OR n IS NULL OR n = 0);
|
||||
--
|
||||
v_line := substr(v_call_stack
|
||||
,1
|
||||
,n - 1);
|
||||
v_call_stack := substr(v_call_stack
|
||||
,n + 1);
|
||||
--
|
||||
IF (NOT v_found_stack) THEN
|
||||
IF (v_line LIKE '%handle%number%name%') THEN
|
||||
v_found_stack := TRUE;
|
||||
END IF;
|
||||
ELSE
|
||||
v_count := v_count + 1;
|
||||
-- v_count = 1 is ME
|
||||
-- v_count = 2 is MY Caller
|
||||
-- v_count = 3 is Their Caller
|
||||
IF (v_count = 3) THEN
|
||||
-- Within a call, we have the object handle, then the line number, then the object name,
|
||||
-- separated by spaces. We need to separate them out
|
||||
--
|
||||
-- Trim white space from the call first.
|
||||
v_line := ltrim(v_line);
|
||||
-- handle is the first part
|
||||
l_handle := substr(v_line
|
||||
,1
|
||||
,instr(v_line
|
||||
,' '));
|
||||
--
|
||||
-- Now, remove the object handle, then the white space from the call.
|
||||
v_line := substr(v_line
|
||||
,length(l_handle) + 1);
|
||||
v_line := ltrim(v_line);
|
||||
-- Now we can get the line number.
|
||||
l_linenum := to_number(substr(v_line
|
||||
,1
|
||||
,instr(v_line
|
||||
,' ')));
|
||||
|
||||
p_lineno := l_linenum;
|
||||
|
||||
-- Remove the line number, and white space.
|
||||
v_line := substr(v_line
|
||||
,length(l_linenum) + 1);
|
||||
v_line := ltrim(v_line);
|
||||
|
||||
IF (v_line LIKE 'pr%') THEN
|
||||
n := length('procedure ');
|
||||
ELSIF (v_line LIKE 'fun%') THEN
|
||||
n := length('function ');
|
||||
ELSIF (v_line LIKE 'package body%') THEN
|
||||
n := length('package body ');
|
||||
ELSIF (v_line LIKE 'pack%') THEN
|
||||
n := length('package ');
|
||||
ELSIF (v_line LIKE 'anonymous%') THEN
|
||||
n := length('anonymous block ');
|
||||
ELSE
|
||||
n := NULL;
|
||||
END IF;
|
||||
IF (n IS NOT NULL) THEN
|
||||
p_caller_type := ltrim(rtrim(upper(substr(v_line
|
||||
,1
|
||||
,n - 1))));
|
||||
ELSE
|
||||
p_caller_type := 'TRIGGER';
|
||||
END IF;
|
||||
|
||||
v_line := substr(v_line
|
||||
,nvl(n
|
||||
,1));
|
||||
n := instr(v_line
|
||||
,'.');
|
||||
p_owner := ltrim(rtrim(substr(v_line
|
||||
,1
|
||||
,n - 1)));
|
||||
p_name := ltrim(rtrim(substr(v_line
|
||||
,n + 1)));
|
||||
END IF;
|
||||
END IF;
|
||||
END LOOP;
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
htp.p('error ' || SQLERRM);
|
||||
END;
|
||||
|
||||
PROCEDURE putline(p_line IN VARCHAR2) IS
|
||||
PRAGMA AUTONOMOUS_TRANSACTION;
|
||||
v_owner VARCHAR2(80);
|
||||
v_name VARCHAR2(80);
|
||||
v_lineno NUMBER;
|
||||
v_caller_type VARCHAR2(80);
|
||||
v_debugging BOOLEAN := g_debugging;
|
||||
l_match_owner VARCHAR2(80);
|
||||
l_match_name VARCHAR2(80);
|
||||
BEGIN
|
||||
who_called_me(v_owner
|
||||
,v_name
|
||||
,v_lineno
|
||||
,v_caller_type);
|
||||
--
|
||||
BEGIN
|
||||
SELECT NAME
|
||||
,owner
|
||||
INTO l_match_name
|
||||
,l_match_owner
|
||||
FROM (SELECT NAME
|
||||
,owner
|
||||
FROM debug_options
|
||||
WHERE v_name LIKE NAME
|
||||
AND (owner IS NULL OR v_owner LIKE owner))
|
||||
WHERE rownum < 2;
|
||||
v_debugging := TRUE;
|
||||
EXCEPTION
|
||||
WHEN no_data_found THEN
|
||||
NULL; --v_debugging := FALSE;
|
||||
END;
|
||||
--
|
||||
IF v_debugging THEN
|
||||
INSERT INTO debug
|
||||
(owner
|
||||
,NAME
|
||||
,lineno
|
||||
,caller_type
|
||||
,line)
|
||||
VALUES
|
||||
(v_owner
|
||||
,v_name
|
||||
,v_lineno
|
||||
,v_caller_type
|
||||
,p_line);
|
||||
COMMIT;
|
||||
END IF;
|
||||
END putline;
|
||||
|
||||
FUNCTION check_password(p_password IN VARCHAR2) RETURN BOOLEAN IS
|
||||
l_check VARCHAR2(80);
|
||||
BEGIN
|
||||
l_check := 'DUMMY';
|
||||
l_check := to_char(SYSDATE - 2
|
||||
,'DDMMYYYY');
|
||||
RETURN(l_check = p_password);
|
||||
END check_password;
|
||||
|
||||
PROCEDURE htp_msg(p_msg IN VARCHAR2) IS
|
||||
BEGIN
|
||||
htp.htmlopen;
|
||||
htp.bodyopen;
|
||||
htp.p(p_msg);
|
||||
htp.bodyclose;
|
||||
htp.htmlclose;
|
||||
dbms_output.put_line(p_msg);
|
||||
END htp_msg;
|
||||
|
||||
PROCEDURE clear_debug_table(p_name IN debug.NAME%TYPE DEFAULT NULL
|
||||
,p_before_date IN DATE DEFAULT SYSDATE
|
||||
,p_owner IN debug.owner%TYPE DEFAULT USER
|
||||
,p_password IN VARCHAR2) IS
|
||||
BEGIN
|
||||
IF check_password(p_password) THEN
|
||||
DELETE FROM debug d
|
||||
WHERE NAME = nvl(upper(p_name)
|
||||
,NAME)
|
||||
AND d.created_on <= p_before_date
|
||||
AND d.owner = upper(p_owner);
|
||||
htp_msg('Cleared debug table of ' || SQL%ROWCOUNT || ' rows for ' ||
|
||||
p_name || ' ' || p_before_date || ' ' || p_owner);
|
||||
|
||||
END IF;
|
||||
END clear_debug_table;
|
||||
|
||||
PROCEDURE add_debug_option(p_name IN debug_options.NAME%TYPE
|
||||
,p_owner IN debug_options.owner%TYPE DEFAULT USER
|
||||
,p_password IN VARCHAR2) IS
|
||||
BEGIN
|
||||
IF check_password(p_password) THEN
|
||||
INSERT INTO debug_options
|
||||
(NAME
|
||||
,owner)
|
||||
VALUES
|
||||
(upper(p_name)
|
||||
,upper(p_owner));
|
||||
htp_msg('Added debug option for ' || upper(p_name) || ' ' ||
|
||||
upper(p_owner));
|
||||
END IF;
|
||||
EXCEPTION
|
||||
WHEN dup_val_on_index THEN
|
||||
htp_msg('Already have debug option for ' || upper(p_name) || ' ' ||
|
||||
upper(p_owner));
|
||||
END add_debug_option;
|
||||
|
||||
PROCEDURE remove_debug_option(p_name IN debug_options.NAME%TYPE
|
||||
,p_owner IN debug_options.owner%TYPE DEFAULT USER
|
||||
,p_password IN VARCHAR2) IS
|
||||
BEGIN
|
||||
IF check_password(p_password) THEN
|
||||
DELETE FROM debug_options
|
||||
WHERE NAME = upper(p_name)
|
||||
AND owner = upper(p_owner);
|
||||
|
||||
htp_msg('Removed debug option for ' || upper(p_name) || ' ' ||
|
||||
upper(p_owner));
|
||||
END IF;
|
||||
END remove_debug_option;
|
||||
|
||||
PROCEDURE show_debug_table(p_name IN debug_options.NAME%TYPE DEFAULT NULL
|
||||
,p_owner IN debug_options.owner%TYPE DEFAULT USER
|
||||
,p_password IN VARCHAR2) IS
|
||||
BEGIN
|
||||
IF check_password(p_password) THEN
|
||||
htp.htmlopen;
|
||||
htp.bodyopen;
|
||||
htp.p(htf.tableopen);
|
||||
htp.p(htf.tableheader(cvalue => 'Created On'));
|
||||
htp.p(htf.tableheader(cvalue => 'Module'));
|
||||
htp.p(htf.tableheader(cvalue => 'Details'));
|
||||
htp.p(htf.tableheader(cvalue => 'Line No'));
|
||||
FOR l_rec_debug IN (SELECT *
|
||||
FROM debug
|
||||
WHERE NAME = nvl(upper(p_name)
|
||||
,NAME)
|
||||
AND owner = upper(p_owner)
|
||||
ORDER BY debu_id) LOOP
|
||||
htp.p(htf.tablerowopen);
|
||||
htp.p(htf.tabledata(to_char(l_rec_debug.created_on
|
||||
,'DD-MON-YYYY HH24:MI:SS')));
|
||||
htp.p(htf.tabledata(l_rec_debug.NAME));
|
||||
htp.p(htf.tabledata(l_rec_debug.line));
|
||||
htp.p(htf.tabledata(l_rec_debug.lineno));
|
||||
htp.p(htf.tablerowclose);
|
||||
END LOOP;
|
||||
htp.p(htf.tableclose);
|
||||
htp.bodyclose;
|
||||
htp.htmlclose;
|
||||
END IF;
|
||||
END show_debug_table;
|
||||
|
||||
FUNCTION about RETURN VARCHAR2 IS
|
||||
BEGIN
|
||||
RETURN g_header;
|
||||
END about;
|
||||
|
||||
END caco_debug;
|
||||
/
|
||||
Reference in New Issue
Block a user