2

我需要在数据库中存储一些查询(包中的内部函数),然后从 SQL Developer 调用函数(来自 ORDS),所以我发现您可以从存储的函数中返回 SYS_REFCURSORs 中的查询,如下所示:

CREATE OR REPLACE FUNCTION test RETURN SYS_REFCURSOR AS
  vRC SYS_REFCURSOR;
BEGIN
  OPEN vRC FOR SELECT  *
               FROM    employees
               WHERE   empid = 34650;

  RETURN vRC;
END;

稍后,只需像这样在 SQL Developer 中检索数据:

SELECT  test
FROM    dual;

所以我的问题是...

它是否正确?我知道每次我们打开一个游标时,我们都需要显式地关闭它,并且我发现的每个示例都关闭了 PL/SQL 中的 refcursor,并且我需要从 SELECT 语句中获取数据(以便将其解析为 JSON SQL 开发人员)。

我还发现,在 SQLPlus 中,“print”语句在获取所有数据后关闭游标,我的示例中的 SELECT 语句是否也这样做?

4

1 回答 1

1

您可以像这样获取光标并打印其内容:

VARIABLE cur REFCURSOR;
BEGIN
  :cur := test();
END;
/
PRINT cur;

和语句都PRINTSELECT读取游标,当它们读取所有行时,它们将隐式关闭游标。您不能从游标读取数据两次(但是,您可以多次调用该函数以获取多个游标都包含相同的信息)。

于 2016-03-09T01:40:51.847 回答