找回密码
 立即注册

QQ登录

只需一步,快速开始

bjhyzy

金牌服务用户

3

主题

6

帖子

57

积分

金牌服务用户

积分
57
最新发帖
bjhyzy
金牌服务用户   /  发表于:2019-11-26 20:11  /   查看:3549  /  回复:6
Oracle 存储过程如下:
create or replace procedure RP_FIXPERCENT(pLoginUserID in varchar2,
                                          pFromTime    in varchar2,
                                          pToTime      in varchar2,
                                          io_cursor    out sys_refcursor)  

其中,io_cursor 为返回的数据集。


我想在数据集的自定义表中调用这个存储过程,请问如何写?




6 个回复

倒序浏览
williamluo
高级会员   /  发表于:2019-11-27 09:29:39
沙发
可另做一个存储过程,将游标遍历一遍,将记录转成表变量,然后返回。SQL Server的示例脚本如下:
/*
-- 返回游标的存储过程
alter proc GetCursor1 (@Cursor1 cursor varying output) as
begin
set @Cursor1 = cursor for select * from T1 where ID in (1,2,5)
open @Cursor1
end
*/

create proc sp_2 as
begin
declare @f1 int,@f2 nvarchar(50)
declare @t table(ID int,Name nvarchar(50))
declare @Cursor1 cursor
-- 调用存储过程
exec GetCursor1 @Cursor1 output

fetch next from @Cursor1 into @f1,@f2
while @@FETCH_STATUS=0
begin
insert into @t(ID,Name)Values(@f1,@f2)
fetch next from @Cursor1 into @f1,@f2
end
close @Cursor1
deallocate @Cursor1
select * from @t
end
回复 使用道具 举报
williamluo
高级会员   /  发表于:2019-11-27 15:51:35
板凳
Oracle数据库因为存储过程不允许返回select结果,需要改用function,将游标转成表变量返回。示例脚本如下:
/*
create or replace procedure proc1 (Cursor1 out sys_refcursor) as
begin
  open Cursor1 for 'select * from hr.jobs';
end;
*/
/*
create or replace type job_object as object
(
  id varchar2(50),
  name varchar2(50)
)
*/
/*
create or replace type job_table is table of job_object;
*/

/*
create or replace function f_cursor
return job_table pipelined
is
cur1   SYS_REFCURSOR;
in_rec Jobs%ROWTYPE;
oneJob job_object;
begin

-- call procedure
   proc1(Cursor1 => cur1);

  loop
    fetch cur1 into in_rec;
    exit when cur1%notfound;

   oneJob := job_object(in_rec.job_id, in_rec.job_title);
   pipe row(oneJob);

  end loop;

  close cur1;

return;
end f_cursor;
*/


-- 数据集的查询语句这样写:
select * from table(f_cursor())

回复 使用道具 举报
bjhyzy
金牌服务用户   /  发表于:2019-11-29 15:41:43
地板
Wyn关于Oracle游标的支持方式,不是很直接,需要太多的间接过程,给数据开发增加了很多的工作量。
希望Wyn能够提供对Oracle游标的支持,因为游标在Oracle中实在用的非常普遍。
回复 使用道具 举报
bjhyzy
金牌服务用户   /  发表于:2019-11-29 15:43:16
5#
不知道Wyn什么时候能正式提供对Oracle存储过程的支持?
回复 使用道具 举报
williamluo
高级会员   /  发表于:2019-11-29 19:17:58
6#
GEF-4691
回复 使用道具 举报
williamluo
高级会员   /  发表于:2019-11-29 19:19:03
7#
开发现在很难给出具体的时间计划,抱歉
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部