程序中需要调用这样一个存储过程,如果返回的都是varchar之类的很简单,执行成功了,现在有的存储过程中返回的包含varchar和记录集名称,我想测试下程序对不对,能不能帮我写个简单的我来测试下,谢谢了存储过程名称:GetAInfo
输入参数:
序号 字段名称 数据类型 字段说明 备注
1 inID VARCHAR
返回参数:
序号 字段名称 数据类型 字段说明 备注
1 AppCode VARCHAR 操作是否出错:1=成功;0=失败
2 ErrorMsg VARCHAR 操作出错提示信息
3 outRecCur Cursor 返回记录集名称
返回记录集字段定义:
序号 字段名称 数据类型 字段说明 备注
1 outID VARCHAR
2 outName VARCHAR
3 outRID VARCHAR
4 outRType VARCHAR
5 outRCount VARCHAR
输入参数:
序号 字段名称 数据类型 字段说明 备注
1 inID VARCHAR
返回参数:
序号 字段名称 数据类型 字段说明 备注
1 AppCode VARCHAR 操作是否出错:1=成功;0=失败
2 ErrorMsg VARCHAR 操作出错提示信息
3 outRecCur Cursor 返回记录集名称
返回记录集字段定义:
序号 字段名称 数据类型 字段说明 备注
1 outID VARCHAR
2 outName VARCHAR
3 outRID VARCHAR
4 outRType VARCHAR
5 outRCount VARCHAR
create table t_test(
outID VARCHAR2(20),
outName VARCHAR2(20),
outRID VARCHAR2(20),
outRType VARCHAR2(20),
outRCount VARCHAR2(20)
);insert into t_test values(......);
....create or replace procedure procedure_name(
inID in VARCHAR2,
AppCode out VARCHAR2,
ErrorMsg out VARCHAR2,
outRecCur out SYS_REFCURSOR --不要用cursor
)as
begin
open outRecCur for
select * from t_test; AppCode := 1;
exception
when others then
AppCode := 0;
ErrorMsg := SQLERRM;
end;
SYS_REFCURSOR ,但我要测试的那个存储过程文档是写的cursor
--cursor 的语法是 cursor cursor_name is SQL语句
--自定义游标大致可以分为两种,一种是 cursor cursor_name is SQL语句
---这种的作用是循环处理数据的,不用于将数据结果集返回
---另外一种就是我写的 游标变量的形式(SYS_REFCURSOR)这种写法是返回结果集用的--如果你就想用普通cursor的话,按照你的描述,必须定义一个记录类型数组,然后将结果插入数组中
--再将这个记录类型数组返回(需要借助于包)
create table t_test(
outID VARCHAR2(20),
outName VARCHAR2(20),
outRID VARCHAR2(20),
outRType VARCHAR2(20),
outRCount VARCHAR2(20)) --包头声明
create or replace package my_pakage as
--记录型变量
type my_record is record(
outID VARCHAR2(20),
outName VARCHAR2(20),
outRID VARCHAR2(20),
outRType VARCHAR2(20),
outRCount VARCHAR2(20));
--记录型数组
type my_varray is table of my_record index by binary_integer;、
--存储过程声明
procedure procedure_name(
inID in VARCHAR2,
AppCode out VARCHAR2,
ErrorMsg out VARCHAR2,
outRecCur out my_varray --这里就是记录型数组类型
);
end my_pakage;--声明包体
create or replace package body my_pakage as
--实现存储过程的声明
procedure procedure_name(
inID in VARCHAR2,
AppCode out VARCHAR2,
ErrorMsg out VARCHAR2,
outRecCur out my_varray
)
as
begin
select * bulk collect
into outRecCur
from t_test;
exception
when others then
AppCode := 0;
ErrorMsg := SQLERRM;
end;end;
/