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语句,没有插入不为空的字段,或者主键的值发生重复的冲突。
在一些复杂的存储过程中,可能不容易找到错误,可以用直接跳到错误语句,把语句单独摘出来,替换相关变量来执行,从而定位错误。
总之,无论是编写、阅读还是测试,都是一个抽丝剥茧的过程,只要找到头绪,剩下的就是耐心。
- 发表于:
- 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据 《腾讯内容开放平台服务协议》 转载发布内容。
- 如有侵权,请联系 cloudcommunity@tencent.com 删除。