现在网站做多宽的,t型布局网站实例,找电商平台帮我卖产品,演示网站此例基于OBE#xff08;Oracle By Example#xff09;的示例。是在SQL Developer中调试存储过程一文的进阶。复习了前文的一些基本概念#xff0c;并纠正了官方示例的一个错误。
本文使用的是标准的HR 示例 Schema#xff0c;调试的存储过程源代码如下#xff1a;
CREAT…此例基于OBEOracle 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(host192.168.56.1,ace sys.xs$ace_type(privilege_listsys.XS$NAME_LIST(JDWP) ,principal_nameHR,principal_typesys.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 结束。