c
Date: Thu, 20 Jan 2000 12:20:02 +0200
Message-ID: <B4188A518787D311BE9700805FE4372712B8A0_at_Manticore.pcb>
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;
[Quoted] /*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;
/
[Quoted] /*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) is
BEGIN
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 - 11:20:02 CET
