PL/SQL Developer中文网站 > 技术问题 > PL/SQL Developer怎么调试存储过程 PL/SQL Developer断点不生效怎么排查

PL/SQL Developer怎么调试存储过程 PL/SQL Developer断点不生效怎么排查

发布时间:2026-06-30 15: 05: 00

一个存储过程能够成功地跑完,并不等于调试器就一定能在预先放好的断点那里停下来。要用PL/SQL Developer把存储过程的调试跑起来,得先满足几个条件才行:登录数据库的那个账号要有调试用的权限,打算调试的目标对象里面要带有调试的时候需要用到的信息,从Test Window里调用的得是当前最新版本的代码,而且断点的位置还要刚好落在那条真的会被执行到的语句上面,这几个条件缺哪一个都可能让断点停不下来。碰到断点没反应的情况,不建议反复去点运行按钮,与其一遍遍地重试,不如按一个固定的顺序逐项排查,更容易找到真正的原因。

一、在PL/SQL Developer里面怎么调试存储过程

用PL/SQL Developer调试存储过程的常规办法,是从Object Browser那个区域直接进入Test Window。在正式开始调试之前,要先确保目标过程已经编译成功了,而且调用的时候需要用到的输入参数也已经提前准备好了,不要到了调试界面才发现参数不全。

1、先打开Test Window

在软件左侧的【Object Browser】里面找到需要调试的那个Procedure、Function或者Package,点右键去选【Test】。系统就会自动生成一段测试用的代码,在下面那个变量显示的区域也会列出所有需要填写的参数。当把这些测试值都输进去以后,不要直接去点普通执行的那一类按钮,要从菜单里选择调试模式来启动整个调试过程,这样才能在断点处停下来。

2、给目标对象把调试信息加上

进到【Tools】→【Preferences】→【Debugger】这个页面,把编译时顺便加入调试信息的那一项给勾上,勾好之后再把目标对象重新编译一次。也可以在【Object Browser】里面,在目标过程或者Package Body上面点右键,直接去选【Add debug information】。有一点需要留意,如果测试库是好几个人一起共用的话,别人一旦重新编译了同一个对象,之前加进去的那些调试信息就很可能被覆盖掉了,这个时候就要再重新执行一遍添加调试信息的操作。

3、设好断点再开始执行

把目标代码打开,在想要观察的那个位置旁边,用鼠标去点一下行号边上那个区域,断点就设置好了。再切换回刚才的【Test Window】,去点击【Start Debugger】这个按钮,也可以直接按键盘上的【F9】来启动。当调试器跑起来以后,就可以用单步进入、单步跳过、继续执行这些常见的功能,去观察变量值的变化和代码实际的执行路径了。

二、断点不生效的时候该从哪里查起

当断点没有按照预期停下来的时候,先要看看断点放的位置靠不靠谱,然后再去查对象的版本是不是最新的、调试权限有没有给到位。很多这类问题其实本身并不复杂,只是中间有某一个环节没把状态同步过来。

1、确认一下断点是不是落在了能执行的语句上

像变量声明的部分、注释行、纯粹的空行,还有BEGIN和END这种关键字本身所在的行,调试器在这些地方往往是停不住的。断点更需要放在那些会实际产生动作的地方,比如赋值的语句、查询的操作、数据的更新、对函数的调用,还有条件判断的语句上面。如果代码里面包含了多个IF分支,那还要去确认一下当前填进去的输入参数,是不是真的会让程序跑到那个分支上去,不然停在一条不会走到的路线上,断点当然就不会触发。

2、把Package Body重新编译一遍

在调试Package里面那些过程的时候,改完代码之后不能只刷新一下编辑器的页面就完事了,一定要重新去编译Package Body。因为数据库那一边很可能还保留着之前那份旧版本的代码,编辑器里看着是新的但跑起来还是旧的。重新编译完了之后,还要把原来那个Test Window先关掉,再从【Object Browser】进去重新打开一次【Test】,免得调试窗口还在继续引用旧代码对应的行号。

3、看一下当前的会话模式有没有选对

如果发现【Start Debugger】这个按钮是灰色点不动的,那就可以进到【Tools】→【Preferences】→【Oracle】→【Connection】里面,去查看一下当前的会话模式是怎么设的。调试器想要正常工作,通常是需要Dual Session Mode或者Multi Session Mode这两种模式的,如果当前选的是Single Session Mode,调试按钮就有可能变灰,或者即便能点也走不进过程的内部去。

4、确认对象没有被别人的修改覆盖掉

好几个人同时在测试库上修改代码的时候,断点用到一半突然失效了,这种事情并不算罕见。可以顺手去查一下那个对象最后一次被编译的时间,看看当前数据库里存着的版本,跟自己本地编辑器里看到的代码内容是不是还保持一致。如果有一段时期需要长期依赖调试来排查问题,那么尽量去用一套独立的Schema,这样被别人覆盖掉代码的概率就会低很多。

三、调试权限应该怎么提前准备好

光是用PL/SQL Developer能够连上数据库,并不代表就可以开始调试存储过程了。那种普通的查询权限和执行权限,只能保证过程本身可以被正常调用起来跑一遍,真要进入那种一步一步跟踪的调试状态,还另外需要一些授权才行。

1、把会话调试相关的权限准备好

用来登录数据库的那个账号,必须先拿到DEBUG CONNECT SESSION这个权限,缺了这个权限的话,调试器可能连初始化都做不完,也有可能只能让过程执行起来,却没法在断点位置停下来进入调试。这类权限一般是由数据库的管理员那边统一来授予的,如果有问题可以先找管理员确认一下。

2、把针对目标对象的调试权限也准备好

如果是调试自己那个Schema下面的对象,相对还会简单一些;要是想去调试放在别人的Schema里面的存储过程,除了刚才的会话权限之外,这个账号还要额外具备目标对象的DEBUG和EXECUTE这两种权限,或者由管理员直接授予DEBUG ANY PROCEDURE这个更高一级的权限。在配置权限的时候,最好是按实际要调试的对象来精确配置,不要随便把一些范围很大的权限到处乱放。

3、检查一下编译时用的模式对不对

如果已经把权限确认过了,断点也设置好了,调试信息也重新加上去了,但调试器还是进不去代码里面,那就可以让数据库的管理员帮忙去检查一下PLSQL_CODE_TYPE这个参数的设置。在调试的场景下面,通常应该使用INTERPRETED这种编译模式;如果目标对象是用NATIVE模式去编译的,那么单步跟踪和断点这类调试功能,可能就没有办法按照通常的方式去工作了。

总结

用PL/SQL Developer怎么调试存储过程,以及当断点不起作用的时候该从哪里开始排查,实际操作的顺序其实挺清楚的:先从【Object Browser】里面把目标对象打开到【Test Window】,接着给这个目标对象把调试信息加上去,然后设好断点再按【F9】去启动执行过程。如果碰到断点没有停下来这种情况,优先级排在前面的检查项目是:断点本身放的位置是否恰当、Package Body有没有被重新编译过、Test Window是不是还在引用旧的缓存内容、当前选的会话模式是不是对的,以及数据库那边是不是已经把调试权限给到位了。就按这几个方向一项一项排查下去,多数情况下是不需要去重装整个客户端的,也犯不着一遍遍去来回改代码。

展开阅读全文

标签:plsql中文乱码plsql乱码plsql使用

PL/SQL Developer
专为Oracle数据库开发
咨询购买
最新文章
PL/SQL游标怎么使用 PL/SQL游标循环性能差怎么优化
很多Oracle开发在写存储过程或批处理脚本时,都会碰到PL/SQL游标怎么使用,以及游标循环性能差怎么优化的问题。游标的作用是把查询到的数据逐行取出来处理,适合需要按记录去判断、计算或调用其他过程的场景,但游标不是越多越好,如果一条SQL就能完成的事却被写成一行一行循环处理,性能就很容易变差,写PL/SQL游标时,操作者要先判断是否真的需要游标,再去考虑循环写法、提交策略和批量处理方式。
2026-06-30
PL/SQL触发器怎么编写 PL/SQL触发器递归触发怎么排查
PL/SQL触发器的编写,和触发器递归触发的排查,这两件事情的关键,是需要先弄清楚触发器到底是在什么时候执行、针对哪一张表来执行、它是执行一次,还是每一行都会执行一次。在Oracle当中,trigger是存储在数据库里面的一种PL/SQL单元,它会在被指定的数据库事件发生的时候,自动地被触发并执行。触发器如果写得好,可以用它来做审计、补充一些字段,或者是进行数据的校验;可要是写得太重了,就容易带来递归触发、性能下降,还有维护起来比较困难这一类的问题。
2026-06-30
PL/SQL Developer怎么调试存储过程 PL/SQL Developer断点不生效怎么排查
一个存储过程能够成功地跑完,并不等于调试器就一定能在预先放好的断点那里停下来。要用PL/SQL Developer把存储过程的调试跑起来,得先满足几个条件才行:登录数据库的那个账号要有调试用的权限,打算调试的目标对象里面要带有调试的时候需要用到的信息,从Test Window里调用的得是当前最新版本的代码,而且断点的位置还要刚好落在那条真的会被执行到的语句上面,这几个条件缺哪一个都可能让断点停不下来。碰到断点没反应的情况,不建议反复去点运行按钮,与其一遍遍地重试,不如按一个固定的顺序逐项排查,更容易找到真正的原因。
2026-06-30
PL/SQL Developer怎么连接Oracle数据库 PL/SQL Developer连接信息怎么保存
数据库环境刚刚搭建起来的时候,最容易让人卡住的往往不是去写那些SQL语句,而是客户端软件、服务名和账号信息之间没有对齐。要想搞清楚PL/SQL Developer这个工具怎么去连接Oracle数据库,以及连接信息又该怎么保存,首先得确认本地的Oracle客户端和网络配置是可用的,然后再把那些经常用到的连接整理到它的连接列表里面去。在保存连接信息的时候,还要顺便区分一下是只保存账号名称,还是把密码也一起存进去,这一点对于办公用的个人电脑和那种多人共用的电脑来说,处理的方式可不能是一样的。
2026-06-30
PL/SQL异常处理怎么写 PL/SQL怎么输出异常信息日志
PL/SQL写异常处理,真正要先想清楚的不是把`WHEN OTHERS`补上就结束,而是先区分你要处理的是已知异常、业务异常,还是兜底异常。Oracle官方文档说明,PL/SQL运行时错误都属于exception,处理结构就是在可执行部分后面接`EXCEPTION`区,再按不同异常写对应处理分支;其中既可以处理Oracle预定义异常,也可以声明并抛出用户自定义异常。
2026-04-29
PL/SQL游标怎么定义 PL/SQL怎么遍历游标结果集
很多人一提到PL/SQL游标,第一反应就是“查出来的数据一行一行取”。这当然没错,但如果只停在这个层面,后面一写就容易把隐式游标、显式游标、`SELECT INTO`、`OPEN FETCH CLOSE`和`FOR LOOP`搅在一起。Oracle官方文档把这件事分得很清楚,PL/SQL里既有系统自动管理的隐式游标,也有需要自己声明和管理的显式游标;显式游标更灵活,特别适合处理多行结果集和带参数查询。
2026-04-29

咨询热线 400-8765-888