您的位置:首页 > 娱乐 > 八卦 > 又一个SQL Developer中调试存储过程的例子

又一个SQL Developer中调试存储过程的例子

2024/12/23 15:33:47 来源:https://blog.csdn.net/stevensxiao/article/details/139756665  浏览:    关键词:又一个SQL Developer中调试存储过程的例子

此例基于OBE(Oracle By Example)的示例。是在SQL Developer中调试存储过程一文的进阶。复习了前文的一些基本概念,并纠正了官方示例的一个错误。

本文使用的是标准的HR 示例 Schema,调试的存储过程源代码如下:

CREATE OR REPLACE PROCEDURE emp_list (pmaxrows IN NUMBER
) ASCURSOR emp_cursor ISSELECTl.state_province,l.country_id,d.department_name,e.last_name,j.job_title,e.salary,e.commission_pctFROMlocations   l,departments d,employees   e,jobs        jWHEREl.location_id = d.location_idAND d.department_id = e.department_idAND e.job_id = j.job_id;emp_record emp_cursor%rowtype;TYPE emp_tab_type ISTABLE OF emp_cursor%rowtype INDEX BY BINARY_INTEGER;emp_tab    emp_tab_type;i          NUMBER := 1;
BEGINOPEN emp_cursor;FETCH emp_cursor INTO emp_record;emp_tab(i) := emp_record;WHILE( emp_cursor%found )AND ( i <= pmaxrows )LOOPi := i + 1;FETCH emp_cursor INTO emp_record;emp_tab(i) := emp_record;END LOOP;CLOSE emp_cursor;FOR j IN REVERSE 1..i LOOPdbms_output.put_line(emp_tab(j).last_name);END LOOP;END;

原文中的存储过程有错:

WHILE ((emp_cursor%FOUND) AND (i <= pMaxRows) LOOP

此处改为了:

WHILE (emp_cursor%FOUND) AND (i <= pMaxRows) LOOP

第一次调试出错:
在这里插入图片描述

错误提示很清晰,按下面赋权即可:

grant DEBUG CONNECT SESSION, DEBUG ANY PROCEDURE to HR;

第二次调试仍出错:

Connecting to the database Local-19c-HR-ORCLPDB1.
Executing PL/SQL: CALL DBMS_DEBUG_JDWP.CONNECT_TCP( '192.168.56.1', '51295' )
ORA-24247: network access denied by access control list (ACL)
ORA-06512: at "SYS.DBMS_DEBUG_JDWP", line 68
ORA-06512: at line 1
Process exited.
Disconnecting from the database Local-19c-HR-ORCLPDB1.

这会是ACL的原因,运行以下代码解决:

 begindbms_network_acl_admin.append_host_ace(host=>'192.168.56.1',ace=> sys.xs$ace_type(privilege_list=>sys.XS$NAME_LIST('JDWP') ,principal_name=>'HR',principal_type=>sys.XS_ACL.PTYPE_DB) );
end;
/

再次调试,以下是正确的信息:

Connecting to the database Local-19c-HR-ORCLPDB1.
Executing PL/SQL: CALL DBMS_DEBUG_JDWP.CONNECT_TCP( '192.168.56.1', '51579' )
Debugger accepted connection from database on port 51579.
Source breakpoint: EMP_LIST.pls:30

设置断点,开始调试,输入值改为5:
在这里插入图片描述
输入Debug Host,即SQL Developer所在的主机:
在这里插入图片描述

程序运行到断点:
在这里插入图片描述

先来演示Run to Cursor。将鼠标放到第44行,然后右键选择Run to Cursor
在这里插入图片描述

程序运行到当前Cursor处,Cursor这里指的是光标,而不是SQL中的游标:
在这里插入图片描述

再演示在运行中修改变量的值:
在这里插入图片描述
单击红框处,选中_value那行,右键选择Modify Value ...
在这里插入图片描述
修改原值King为James:
在这里插入图片描述
可以看到其生效了 ,然后点击上方的Resume按钮:
在这里插入图片描述
我们在输出中看到了James:
在这里插入图片描述
结束。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com