dbms_debug
Date: Thu, 20 Jan 2000 16:44:26 +0200
Message-ID: <B4188A518787D311BE9700805FE4372712C161_at_Manticore.pcb>
[Quoted] i try to debug my pl_sql code using dbms_debug package (i have oracle 8.1.5)
problem : i coud not receive values of varibles
i do :
connect ...
SET SERVEROUTPUT ON;
ALTER SESSION SET PLSQL_DEBUG = true;
/*test proc i want to debug*/
CREATE OR REPLACE PROCEDURE TEST1(I INTEGER) AS
J INTEGER;
BEGIN
DBMS_OUTPUT.PUT_LINE('TEST('||I||')');
IF I<>0 THEN
J:=1+I;
TEST1(0);
END IF;
END;
/
/*package only replace dbms_debug*/
CREATE OR REPLACE PACKAGE DEB AS
/*TARGET*/
FUNCTION INIT RETURN VARCHAR2;
PROCEDURE DEBUG_ON ;
PROCEDURE DEBUG_OFF ;
procedure EXECUTE(what IN VARCHAR2, bind_results IN BINARY_INTEGER, errm IN OUT NOCOPY VARCHAR2);
/*ATTACH*/
PROCEDURE ATTACH(SESS VARCHAR2);
PROCEDURE DETACH;
FUNCTION SYNCHRONIZE RETURN VARCHAR2;
FUNCTION CONTINUE RETURN VARCHAR2;
END DEB;
CREATE OR REPLACE PACKAGE BODY DEB AS
DATA_NOT_FOUND EXCEPTION;
PRAGMA EXCEPTION_INIT (DATA_NOT_FOUND,+100);
coll sys.dbms_debug_vc2coll; -- results
R_INFO DBMS_DEBUG.RUNTIME_INFO; -- CURRENT RUNTIME_INFO
FUNCTION INIT RETURN VARCHAR2 IS
BEGIN
RETURN DBMS_DEBUG.INITIALIZE(NULL,1);
END; PROCEDURE DEBUG_ON IS
BEGIN
DBMS_DEBUG.DEBUG_ON(TRUE,FALSE);
END; PROCEDURE DEBUG_OFF IS
BEGIN
DBMS_DEBUG.DEBUG_OFF;
END;
PROCEDURE ATTACH(SESS VARCHAR2) IS
BEGIN
DBMS_DEBUG.ATTACH_SESSION(SESS,1);
END;
PROCEDURE DETACH IS
BEGIN
DBMS_DEBUG.DETACH_SESSION;
END;
FUNCTION SYNCHRONIZE RETURN VARCHAR2 IS
BEGIN
RETURN DBMS_DEBUG.SYNCHRONIZE(R_INFO);
END;
FUNCTION CONTINUE RETURN VARCHAR2 IS
BEGIN
RETURN
DBMS_DEBUG.CONTINUE(R_INFO,dbms_debug.break_next_line+dbms_debug.break_any_c
all);
END;
procedure EXECUTE(what IN VARCHAR2, bind_results IN BINARY_INTEGER, errm IN OUT NOCOPY VARCHAR2) isBEGIN
dbms_debug.execute(WHAT,-1,bind_results,coll,errm); END;
END DEB;
- now : t:connect target a : connect attach
t:
SET SERVEROUTPUT ON;
EXECUTE DBMS_OUTPUT.PUT_LINE(DEB.INIT);
result '12a000001'
a:
EXECUTE DBMS_DEBUG.ATTACH_SESSION('12a000001');
t:
EXECUTE DEB.DEBUG_ON;
a:
EXECUTE DBMS_OUTPUT.PUT_LINE(DEB.SYNCHRONIZE);
result 0 ('ok')
DECLARE
D VARCHAR2(100);
BEGIN
DEB.EXECUTE('begin TEST1(1); end;',0,D);
DBMS_OUTPUT.PUT_LINE(D);
END;
EXECUTE DBMS_OUTPUT.PUT_LINE(DEB.CONTINUE);
result 0 ('ok')
DECLARE
V VARCHAR2(100);
I INTEGER;
BEGIN
I:=DBMS_DEBUG.GET_VALUE ('I',0,v);
DBMS_OUTPUT.PUT_LINE('VAL='||V);
DBMS_OUTPUT.PUT_LINE(I);
END;
result
VAL=
2 (debuginfo missing)
EXECUTE DBMS_OUTPUT.PUT_LINE(DEB.CONTINUE);
EXECUTE DBMS_OUTPUT.PUT_LINE(DEB.CONTINUE);
T:
RESULT
TEST(1)
TEST(0)
(PROC WORKS)
WHATS WRONG ?
-- с приветом витек -- с приветом витекReceived on Thu Jan 20 2000 - 15:44:26 CET