0

我有一个关于 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;
4

1 回答 1

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;
于 2012-09-27T18:39:16.633 回答