Sql 我应该如何在函数中使用光标?

Sql 我应该如何在函数中使用光标?,sql,oracle,function,cursor,Sql,Oracle,Function,Cursor,我希望在包的函数中使用游标,如下所示: PACKAGE PKG AS TYPE RESULT_T IS TABLE OF varchar2(30); FUNCTION GENERATEF RETURN RESULT_T PIPELINED; END PKG; / create or replace PACKAGE BODY PKG AS FUNCTION GENERATEF RETURN RESULT_T PIPELINED IS BEGIN FOR TLC IN (select

我希望在包的函数中使用游标,如下所示:

PACKAGE PKG
AS
TYPE RESULT_T
IS
  TABLE OF varchar2(30);
FUNCTION GENERATEF
  RETURN RESULT_T PIPELINED;
END PKG;
/
create or replace
PACKAGE BODY PKG
AS
FUNCTION GENERATEF
  RETURN RESULT_T PIPELINED
IS
BEGIN
  FOR TLC IN (select name from users)
  LOOP
    PIPE ROW(TLC.name);
  END LOOP;
  RETURN;
END;
END PKG;
/
SELECT * FROM TABLE(PKG.GENERATEF);
我认为现在的问题集中在

select name from users
因为如果我使用

select sysdate from dual
该功能运行良好

如果我想从其他视图中提取数据,它会带来如下错误:

PACKAGE PKG
AS
TYPE RESULT_T
IS
  TABLE OF varchar2(30);
FUNCTION GENERATEF
  RETURN RESULT_T PIPELINED;
END PKG;
/
create or replace
PACKAGE BODY PKG
AS
FUNCTION GENERATEF
  RETURN RESULT_T PIPELINED
IS
BEGIN
  FOR TLC IN (select name from users)
  LOOP
    PIPE ROW(TLC.name);
  END LOOP;
  RETURN;
END;
END PKG;
/
SELECT * FROM TABLE(PKG.GENERATEF);
错误7,45:PL/SQL:ORA-00942:表或视图不存在

但事实上,这种观点是存在的


我不知道问题出在哪里。我不确定是否可以像我提到的那样使用光标

它对我有用。如果只运行查询select name from users,会发生什么情况?你确定你有正确的权限选择吗?如果你可以从用户中选择,但程序包看不到它,那么这可能意味着它位于不同的架构中,并且你对它的权限是通过角色授予的,正如所解释的,在定义者的权限程序包中被忽略。谢谢你的澄清。我不确定这是否是由特权问题引起的。用户视图列在sql developer的其他用户导航中。如果是特权问题,我还有其他解决方案吗?例如,创建另一个存储用户信息的相同表?@rida-如果没有公共同义词,则可能需要从.Users中进行选择,即使在独立运行时也是如此。首先检查/修复该问题,然后确保将select priv直接授予拥有该包或使用该链接描述的调用方权限构建该包的人。“现在还不清楚出了什么问题。”亚历克斯普尔,谢谢你的建议。现在,我检查了我的模式是ops$e01522,视图的名称是ard113$curr.ae。但当我想在ops中选择$e01522.ard113$curr.ae时。它仍然不能工作。消息为ORA-00933:SQL命令未正确结束。我不确定表达式是否适合从模式视图中提取数据。