我有一个简单的oracle存储过程proc1如下:
CREATE OR REPLACE PROCEDURE SYS.proc1
IS
total NUMBER := 0;
temp INTEGER := 0;
BEGIN
FOR i IN 1 .. 5
LOOP
temp := 2 * i;
total := total + temp;
END LOOP;
DBMS_OUTPUT.put_line (total);
END;
proc1的所有者是sys。 sys具有足够的权限来调试proc1,如下面的sql命令所示:
SELECT *
FROM session_privs
WHERE privilege LIKE '%DEBUG%';
我会得到以下结果:
DEBUG CONNECT SESSION
DEBUG ANY PROCEDURE
我使用oracle 11g,因为以下sql命令显示:
SELECT * FROM v$database;
SELECT * FROM v$instance;
上层查询给了我:
1223277241,ORCL,8/21/2009 5:28:25 PM,886308,8/21/2009 5:28:28 PM,1,10/15/2007 10:08:59 AM,NOARCHIVELOG,3510666,3399439,CURRENT,8/21/2009 5:28:26 PM,10008,3536169,11/10/2009 3:16:51 PM,NOT ALLOWED,8/21/2009 5:28:25 PM,READ WRITE,MAXIMUM PERFORMANCE,UNPROTECTED,ENABLED,1223308473,1223308473,PRIMARY,886308,DISABLED,SESSIONS ACTIVE,DISABLED,NONE,NO,NO,NO,NO,7,Microsoft Windows IA (32-bit),2,2,3536339,NO,NO,NO,orcl,0,DISABLED,,0,,,NO,,NO,
和
1,orcl,WD00070136,11.1.0.6.0,11/9/2009 11:04:29 AM,OPEN,NO,1,STOPPED,,ALLOWED,NO,ACTIVE,PRIMARY_INSTANCE,NORMAL,NO
在TOAD中,我在proc1设置断点,然后单击“使用调试器执行plsql”按钮。 TOAD运行proc1并立即显示结果。它只是不会在断点处停止。我不知道为什么。有人遇到过这个问题吗?你怎么解决它?非常感谢!
ps:我使用toad 9.7.2
答案 0 :(得分:1)
你究竟在哪里放置断点?我希望你不要把它放在CREATE PROCEDURE
行。
如果你把它放在那个,它不起作用(该语句只创建过程,它不执行它)。你必须从某个地方调用proc1并将断点放在调用它的行上,如下所示:
BEGIN
proc1; -- place your breakpoint on this line
END;