0

我想从一个函数返回一个游标,我已经读过我可以使用:

return sys_refcursor

进而

open curs for select* from mytable;
return curs;

我试过 curs.att := 'something' 但我得到一个错误

另请阅读我可以做我自己的类型:

 TYPE type IS REF CURSOR RETURN mytable%ROWTYPE;

然后

CURSOR cur IS
    SELECT* FROM mytable;
var cur%ROWTYPE;

BEGIN
OPEN cur;
FETCH cur INTO var;
var.att = 'something';
RETURN var;

这次我没有在分配中得到错误,而是在返回语句中。

如果我将 var 类型更改为我的类型,我将无法获取该值。

我不想编辑光标,但不是表格,我该怎么做?

4

1 回答 1

1

游标是只读结构。更改从游标中获取的数据的唯一方法是更改​​用于打开游标的 SQL 语句或更改基础表中的数据。

虽然可以将游标从一个 PL/SQL 块返回到另一个块,但它很少是合适的体系结构。SYS_REFCURSOR当您想要将结果返回给知道如何使用游标的客户端应用程序时,A通常是合适的。

但是,您真的要返回游标吗?还是要返回记录类型?您发布的第二个代码片段似乎试图返回一条记录——这当然是可能的,但您需要声明该函数返回一条记录而不是游标。也就是说,RETURN声明中的语句需要是RETURN mytable%ROWTYPE而不是RETURN type. 例如,如果要根据EMP表返回一条记录

create or replace function get_emp( p_empno in emp.empno%type )
  return emp%rowtype
is
  l_rec emp%rowtype;
begin
  select *
    into l_rec
    from emp
   where empno = p_empno;
  l_rec.sal := l_rec.sal + 100;
  return l_rec;
end;
于 2012-04-26T01:41:20.683 回答