有人可以解释一下如何以及何时应该在 oracle 中使用 syscursor 吗? [关闭]

Posted

技术标签:

【中文标题】有人可以解释一下如何以及何时应该在 oracle 中使用 syscursor 吗? [关闭]【英文标题】:Can some one give me a explanation about how and when should use syscursor in oracle? [closed] 【发布时间】:2017-01-19 03:42:53 【问题描述】:

syscursor为例进行说明。

什么时候在plsql过程中使用syscursor?我浏览了网站,但不知道如何以及何时使用它。

【问题讨论】:

文档中有一整章与游标相关:docs.oracle.com/database/121/LNPLS/static.htm#LNPLS00602 网上有很多文章:oracle.com/technetwork/issue-archive/2013/13-mar/… 这个问题太宽泛了,我投票结束。 Alternate of sys_refcursor的可能重复 【参考方案1】:

PL/SQL 过程使用SYS_REFCURSOR 返回记录集。

示例 - 让我们获取给定模式的所有表详细信息并通过 sys_refcursor 返回

CREATE OR REPLACE PROCEDURE GET_TABLE_DETAILS(schemaName    IN VARCHAR2,
                                              table_details OUT SYS_REFCURSOR) IS
  BEGIN
    OPEN table_details FOR
      select table_name, column_name, data_type from ALL_TAB_COLUMNS where OWNER = schemaName;
    END GET_TABLE_DETAILS;

这里的table_details out参数将包含选择查询的结果数据,可以如下检索。

DECLARE
  table_details_cursor  SYS_REFCURSOR;
  tab_name   ALL_TAB_COLUMNS.table_name%TYPE;
  col_name   ALL_TAB_COLUMNS.column_name%TYPE;
  data_type  ALL_TAB_COLUMNS.data_type%TYPE;
BEGIN
  GET_TABLE_DETAILS (schemaName    => 'DUMMY',
                     table_details => table_details_cursor);

  LOOP 
    FETCH table_details_cursor
    INTO  tab_name, col_name, data_type;
    EXIT WHEN table_details_cursor%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE(tab_name || ' | ' || col_name || ' | ' || data_type);
  END LOOP;
  CLOSE table_details_cursor;
END;

不过详细解释需要通过Oracle文档-Oracle - Cursors Documenatation

【讨论】:

【参考方案2】:

据我所知,Oracle 中没有像“syscursor”这样的东西。可能你指的是 SYS_REFCURSOR

以下网址应该可以帮助您了解如何以及何时使用它。

https://oracle-base.com/articles/misc/using-ref-cursors-to-return-recordsets

【讨论】:

其实SYS_REFCURSOR只是数据类型RefCursor的别名。 RefCursor 的值是一个“游标”。

以上是关于有人可以解释一下如何以及何时应该在 oracle 中使用 syscursor 吗? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

你能解释一下何时以及为啥在 hive 中调用 mapreduce

何时使用 SQL_NO_CACHE

&-Operator/ C++,解释 [关闭]

双链表何时比单链表更有效?

Swift 委托 - 何时在委托上使用弱指针

我对java继承有一个非常基本的了解。有人可以解释一下应该怎么做?