PLSQL中存储过程调试

1 如何进行调试

1.1 前言

在工作或者学习中,我们经常会遇到储存过程调用报错或者函数、触发器、包体等调用报错,如果完全依赖个人经验去排查问题,明显是不现实的,所幸PL/SQL Developer工具提供了强大的调试功能,完全可以与其他变成语言的IDE相媲美。后续将详细阐述如何使用PL/SQL Developer工具进行调试,以及调试过程中的常见操作和问题解决办法。

1.2 安装PL/SQL Developer

  • 软件版本:目前推荐版本为PL/SQL Developer 12,不推荐使用版本过低或者过高PL/SQL Developer版本。
  • 软件下载:
  • 软件安装:缺省安装即可。

 

1.3 登陆PL/SQL Developer

  • 使用本地TNS名登陆

在本地oracle客户端主目录下的network\admin文件夹中配置tnsnames.ora,示例如下:

ORCL =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.46)(PORT = 1521))

    )

    (CONNECT_DATA =

      (SERVICE_NAME = orcl)

    )

  )

然后就可以在PLSQL登陆界面选择对应的服务名,输入账号密码进行登陆

 

  • 使用连接串方式登陆

Oracle连接串格式为:[oracle数据库IP地址]:[端口号缺省为1521]/[实例名]

1.4 准备调试

  • 方法一:在SQL窗口输入存储过程(函数、包体)或者左侧的对象列表中找到对应的存储过程,然后右键选择测试,即可自动生成测试脚本
  • 方法二:新建测试窗口,会自动将基础的语句生成,然后自行输入测试的语句
  • 生成测试语句后,需要对存储过程点击右键,选择添加调试信息。

1.5 常见的测试语句书写

       通常存储过程都是有入参和出参的,因此不论是自动生成的测试语句还是自己书写的测试语句,都需要对入参进行设置,设置入参的方法通常有3种。

  • 一种是使用绑定变量的方式。即 :变量名 的方式,然后在窗体下面的列表中进行赋值操作。自动生成的测试语句会自动设置变量名,只需要对变量赋值即可。
  • 另外一种就是直接将过程的入参写好,通常适用于没有出参的存储过程。
  • 最后一种是在测试语句中定义变量,并对变量赋值的方式,通常我们调试clob或者xml类型的入参的存储过程会使用这种方式。

1.6 开始调试

  • 点击开始调试按钮即可开始调试

调试中常见的功能有:

  • 运行:即直接运行,相当于直接调用存储过程或者运行断点处,通常配合断点使用。

在调试界面,进入到存储过程界面后,在左侧的行号处单击即可打断点,再次单击鼠标左键则取消断点。

单步进入:按顺序逐个语句,快捷键为ctrl+N

运行到光标行:即直接运行到光标定位的位置,该功能较为常用,通常在初步判断异常位置时使用,可以快速运行到自己需要的位置(与断点和运行配合效果类似)

运行到下一个异常:即直接运行到下一个出现异常的地方,对于简单的存储过程,搞功能可以快速定位到异常,非常实用,但是对于较为复杂的存储过程,本身存在很多异常的情况下,往往可能出现无法准确定位到自己需要的位置的情况。

  • 在调试过程中查看变量的值,可以将鼠标放置到对应的变量上,也可以对变量点击右键,选择添加到变量监视器,即可在下面的变量列表查看到对应的变量值。

1.6 调试期间常见问题处理

  • 点开始调试则PLSQL程序卡死(针对RAC环境)

问题原因:调试存储过程要发起两个会话(运行、调试),我们plsql的默认配置会话方式,是多路会话(工具-首选项-连接), 如果在rac环境,实际PLSQL每次新增一个会话,数据都会根据自身情况随机分配instance。plsql发起调试,数据库如果把调试和运行的会话分配给了不同的instance,这时候,就会出现卡死的情况。

解决办法:修改TNS文件,指定实例名,实例名需要根据实际情况指定。

调试含CLOB类型字段的存储过程提示:ORA-03127: 在活动操作结束之前不允许进行操作

问题原因:clob对象未释放

解决办法:在调试语句end之前加dbms_lob.freetemporary(:变量名);

 

  • 调试报错,提示ORA-01031: insufficient privileges,则说明当前用户权限不足,需要管理员给其赋debug权限,语句示例如:

GRANT debug any procedure, debug connect session TO USERXXX;

  • 20
    点赞
  • 89
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狂狼的小蝴蝶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值