pl/sql 存储函数 ora-01002 无序获取 SIMPLE

Posted

技术标签:

【中文标题】pl/sql 存储函数 ora-01002 无序获取 SIMPLE【英文标题】:pl/sql stored function ora-01002 fetch out of sequence SIMPLE 【发布时间】:2014-11-25 19:09:02 【问题描述】:

抱歉,如果之前有人问过这个问题,但我在网站上搜索时找不到它。

我已经为一个 oracle DB 编写了以下存储函数,其中变量名称的更改更易于阅读。

create or replace FUNCTION MY_FUNCTION 
(
  INPUT IN NUMBER 
, OUTPUT OUT SYS_REFCURSOR 
) RETURN SYS_REFCURSOR AS 
BEGIN
  OPEN OUTPUT FOR
  select *
  FROM A_USER.A_VIEW myView
  WHERE myView.ID = INPUT;
  RETURN OUTPUT;
END MY_FUNCTION;

因此,当在 sql developer 中运行/测试时,您会得到一个“输出变量”选项卡。在该选项卡中有两个值:传统意义上的函数返回的 和 OUTPUT 输出变量的值"OUTPUT"。它们应该是相同的,但我为“输出”得到的值是标题中的错误,并且 正在正常工作。

我对 pl/sql 很陌生,并且从未在学校真正学习过它。有人可以给我一些关于这里发生的事情以及解决方案的见解吗? 谢谢 伊森

【问题讨论】:

抱歉,但我不明白为什么你会返回相同的值两次,如果只使用return value 就可以解决问题? @Aramillo 这是一个普遍的问题。他们都应该工作。 【参考方案1】:
create or replace FUNCTION MY_FUNCTION 
(
  INPUT IN NUMBER 
, OUTPUT IN OUT SYS_REFCURSOR 
) RETURN SYS_REFCURSOR AS 
BEGIN
  OPEN OUTPUT FOR
  select *
  FROM A_USER.A_VIEW myView
  WHERE myView.ID = INPUT;
  RETURN OUTPUT;
END MY_FUNCTION;

更改输出变量(refcursor)的声明。并在调用例程中声明一个(无论我是什么)。

【讨论】:

以上是关于pl/sql 存储函数 ora-01002 无序获取 SIMPLE的主要内容,如果未能解决你的问题,请参考以下文章

ORA-01002: 提取乱序

ORA-01002: 提取乱序

提取序列 <ora-01002> 回滚

ORA-01002: 提取过程中的顺序不正确

ORA-01002: 提取乱序

PL-SQL 存储函数和存储过程