谁能帮我写个简单的存储过程,返回参数中“包含”记录集

KissApple 2011-07-18 11:36:05
程序中需要调用这样一个存储过程,如果返回的都是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
...全文
69 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
KissApple 2011-07-19
  • 打赏
  • 举报
回复
明白了,谢谢
BenChiM888 2011-07-18
  • 打赏
  • 举报
回复

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;
BenChiM888 2011-07-18
  • 打赏
  • 举报
回复

--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;
/

KissApple 2011-07-18
  • 打赏
  • 举报
回复
请教下,为什么不要用cursor?事实上我建存储过程时如果写cursor,pl/sql是报错的,只能写
SYS_REFCURSOR ,但我要测试的那个存储过程文档是写的cursor

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧