PL/SQL测试
- 打开存储过程,点击包头右键选择添加调试信息
- 点击方法头,右键
- 打断点,这里就不截图了,直接在所需要打断点的左边行号处,用鼠标双击即可出来断点标识。
- 填写入参,然后点击左上角的按钮开始测试,然后使用旁边几个按钮就行调试。
存储过程使用了临时表,如何用PL/SQL进行测试
- 因为临时表是会话级的,只在同一个会话中能看到数据,所以使用了临时表可在调用方法之前,先往该临时表中插入数据进行测试
执行了某个方法后,想看下执行成功后所生产的数据。
- 在我们执行方法测试时,如果未提交,只能在当前窗口的会话中看到,所以可以在同一个会话中,先执行方法,然后再进行查询执行后的数据,看是否符合逻辑预期。
declare
v_result int; --执行结果
v_msg varchar2(200); --输出参数
begin
--插入加工前数据
Insert Into SaleOrderDtl (line,Vendorcode,Receivercode,Wrhcode,Gdcode,Psrcode,Qpcstr,Qtystr,Qty,Price)
Values(1,'v123456','0001','w123','g1001','9999',null,null,7,null);
--调用加工方法
v_result := Pkg_SaleOrder.ON_MODIFY('单号0001','单据类型', '操作人', 目标状态, v_msg);
end;
--查看加工后的数据
select * from SaleOrderDtl;
在执行存储过程中,想看到运行中产生的数据
- 方法执行的过程中,我们是看不到数据的,这时可能有错误,但是我们不能知道是什么原因造成的,就需要看下运行中的数据来找出错误。
- 举个例子:在界面操作时,会调用存储过程,但是报错了,我们并不能得知具体哪个地方报错,我们用PL/SQL测的话,可能需要构造很多的数据,非常麻烦,这时就可以运行过程中的数据存下来,查看具体错误原因。
- 我们需要把数据放到一个表中,所以我们可以构建一个存储过程,用来动态创建表,用完后自行删掉就行了,存储过程如下,需要不同的条件自己加上就行了。
CREATE OR REPLACE Procedure Test_SaveTargetData(piTableName In Varchar2) Is
v_Prex Varchar2(60);
Begin
v_Prex := 'test_';
Begin
--删除测试表
execute immediate 'drop table ' || v_Prex || piTableName;
Exception
When Others Then
Null;
End;
--创建测试表,并把目标表中的数据放到测试表中
execute immediate ' create table ' || v_Prex || piTableName ||' as select * from ' || piTableName;
End;
-
用来动态创建表的存储过程的使用,同上名称为Test_SaveTargetData
在所需的位置,加上该存储过程,并指定表名,重新执行存储过程Pkg_SaleOrder即可,然后在页面上进行操作,操作完后在数据库查询新生成的测试表,这里既是Test_SaleOrderDtl
-
使用运行中产生的数据
在看了数据之后,可能还需要配合存储过程一块使用,这时把测试表Test_SaleOrderDtl的数据插入到SaleOrderDtl即可,在调试存储过程就可以用到这些数据,如果SaleOrderDtl是临时表,这种测试方法很适合。