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