PL/SQL存储过程常见错误及测试方法

Oracle数据库编程中,最让新手有畏难情绪的莫过于PL/SQL的存储过程。新手在学会建数据库、导入导出数据库、创建用户表空间、创建表、使用select、update、insert和delete操作表数据后,往往止步于存储过程。

前文讲过存储过程包括FUNCTION、PROCEDURE和PACKAGE,它们无非就是用if else、for loop、while等条件或循环语句,将select、update、insert和delete语句组织起来,结合Oracle的内置函数,通过增、删、改、查等操作,实现业务逻辑的过程,并不难,更不神秘。

本文简要介绍存储过程的常见错误及测试方法。

一、测试方法

PL/SQL的存储过程,是服务于应用系统的。一般情况,都是应用系统调用存储过程,传入参数,操作数据库,取得返回值,实现应用应用系统的某项功能。

1、获取参数

要测试存储过程,第一步就是获取传入存储过程的参数。以某应用系统为例:

“生成档案号”按钮,绑定了某存储过程,自动生成档案号。

点击F12,打开调试窗口,切换到Network标签页:

点击“生成档案号”,查看Network中列出的http请求:

在这一堆的请求中,首先排除gif、png等图片,在其他请求中,我们发现有一个叫做executeProcedure.htm的请求:

在最下方的Form Data可以找到procname、recid,也就是存储过程名称fnbtngetDAH和参数。

2、开始测试

在PL/SQL中找到名为fnbtngetDAH的存储过程,右键测试(Test):

打开测试窗口,输入获取的参数(没有的参数留空即可):

点击绿三角放大镜按钮,进入存储过程测试:

在途中我们可以看到一系列功能,具体功能简述如下:

:正常执行存储过程,不停止。

:单步进入,按存储过程顺序,单句执行,如果调用其他存储过程或循环,则进入存储过程或循环。

:单步跳过,按存储过程顺序,单句执行,如果调用其他存储过程或循环,跳过不进入。

:单步跳出,从当前存储过程或循环中跳出。

:跳到光标位置。

:调到下一个错误或异常。

在Variable输入变量名,可以实时监控该变量的值(Value)。

二、存储过程常见错误

存储过程的错误,千奇百怪,例如如下语句:

将一个字符串赋值给一个整数,出现以下错误:

根据错误提示基本可以发现问题,如果提示不明显,也大多可以通过搜索类似“ORA-06502”的错误号,在网上找到已有的解决方案。

最常见的一些错误:

1、给变量或字段赋予不同类型的值,例如给integer赋varchar2(但是可以给字符串赋整数。。。),给date赋number等等。

2、select into 变量语句,没有找到或找到多个值,这种情况下一般加max或min就可以解决。

3、语法错误,例如句末缺失分号,FUNCTION没有返回值,别名(ALIAS)指向混乱等等。

4、insert into语句,没有插入不为空的字段,或者主键的值发生重复的冲突。

在一些复杂的存储过程中,可能不容易找到错误,可以用直接跳到错误语句,把语句单独摘出来,替换相关变量来执行,从而定位错误。

总之,无论是编写、阅读还是测试,都是一个抽丝剥茧的过程,只要找到头绪,剩下的就是耐心。

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180130G1GOS000?refer=cp_1026

扫码关注云+社区