函数返回 sys_refcursor

Posted

技术标签:

【中文标题】函数返回 sys_refcursor【英文标题】:Function return sys_refcursor 【发布时间】:2012-09-27 12:09:09 【问题描述】:

我有一个关于 sys_refcursor 的问题。

sys_refcursor 只能与 select 语句一起使用,或者可以像下面这样使用。我希望该。

p_cursor 被定义为 sys_refcursor

FOR i IN c
    LOOP
        IF (p_start_date BETWEEN i.start_date AND i.end_date)
            OR (p_end_date BETWEEN i.start_date AND i.end_date)
        THEN
            p_cursor := i.product_no;
        END IF;
    END LOOP;

【问题讨论】:

那不是游标,它是一个单一的值。您在寻找什么,以返回产品编号列表? @tbone 如果我不使用 SQL 语句,我想知道是否将 product_no 和另一列分配给 p_cursor。 @tbone 如果条件满足,那么我想分配产品编号列表。谢谢 我不太清楚你的意思 - “将另一列分配给 sys_refcursor”?从上次我检查你不能为sys_refcursor 分配任何东西,你可以定义一个强或弱的refcursor。您还可以从游标(refcursor)中获取数组、集合、行类型等。快速example。 【参考方案1】:

根据您的需要,您有两种方法可以做到这一点。

第一 如果您始终希望将列放在光标中,并根据该条件为该列分配值。您可以执行以下操作

代码:

OPEN p_cursor FOR   
SELECT i.columna1, i.columna2,
       (SELECT i.product_no
          FROM dual
         WHERE (p_start_date BETWEEN i.start_date AND i.end_date)
            OR (p_end_date BETWEEN i.start_date AND i.end_date)
        ) as product_no
FROM table_name i

第二 如果你有时想要有专栏,有时你只是不想。您可以动态地在 varchar 变量中创建查询,然后将该查询分配给游标。

代码:

DECLARE
  var VARCHAR2(200);  
BEGIN

  var := 'select * from dual';

  open p_cursor for var;

END;

【讨论】:

感谢您的解决方案。问候

以上是关于函数返回 sys_refcursor的主要内容,如果未能解决你的问题,请参考以下文章

JAVA里的函数返回值,可以返回几个?

C语言如何写有返回值的函数

c++ 函数返回引用问题

Go语言函数返回值

什么是函数返回值?

函数的返回类型有几种?它们的含义是啥?