17,377
社区成员
发帖
与我相关
我的任务
分享
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;
--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;
/