函数返回sys_refcursor

时间:2012-09-27 12:09:09

标签: database oracle function plsql oracle10g

我有一个关于sys_refcursor的问题。

sys_refcursor只能与select语句一起使用,或者可以像下面这样使用它。我想函数返回sys_refcursor。

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;

1 个答案:

答案 0 :(得分: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;